我們試圖通過進行一次批量搜索來優化我們的搜索請求,所以我們試圖使用 Searchkick.multi_search。然而,它只回傳 Searchkick::Query,并將結果填充到 results 屬性中,作為一個普通的 Array。
那么,現在如果我嘗試results.with_highlights...,它就會失敗
undefined method `with_highlights' for #<Array:0x000055a82a7440f0>
或者,如果我在search_query.with_highlights上嘗試,就會失敗
undefined method `with_highlights' for #<Searchkick::Query:0x00007f47c5d0cde8>
當使用multi_search時,我如何獲得亮點?
uj5u.com熱心網友回復:
得到了!
在潛入Searchkick代碼庫并檢查了Searchkick::Query實作后,發現execute方法是我所需要的。
def execute
@execute ||= begin
begin>
回應 = execute_search
if retry_misspellings?( response)
準備
回應 = 執行搜索
end 結束
rescue => e # TODO救援型別。
handle_error(e)
end
handle_response(response)
end
end end
handle_response(response)正是我們使with_highlights發揮作用所需要的。
那么我的最終實作就像下面這樣:
groups = Group.search(query, execute: false)
users = User.search(query, execute: false)
Searchkick.multi_search([groups, users] )
execute這里不會做任何額外的請求,因為它已經快取了在一個實體變數@execute。
highlighted_groups_results = groups.execute.with_highlights(...
...
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/307028.html
標籤:
上一篇:語法錯誤。無效的正則運算式
