搜尋最佳化
這裡主要介紹在實際查詢過程中可能遇到的各種情況,及可以最佳化的方法。當您發現自己的搜尋效果不滿意或者不知道該如何?,請聯絡我們。
搜尋查詢的效果主要跟query關鍵詞中命中的文檔數有關,命中的文檔數越多,系統要進行的計算就越多,那麼耗時就會越高。所以最佳化的一個重要手段就是盡量降低query召回的文檔數。
- 查詢需要帶上索引名(應用結構中的“索引名”),否則將預設取default索引,如果沒有default,則直接報錯無結果。
query='mp3'相當於query=default:'mp3' - 查詢關鍵詞必須帶上單引號,否則很可能會報錯無結果。
Error: query=default:mp3 Right: query=default:'mp3' 如果查詢詞中包含’,則需要轉義或者去掉;2,查詢詞的最後一個字元不能是’\’,否則會被當成轉義符從而查詢報錯,如果要搜尋’\’,需要對’\’進行轉義。
query=default:'北京大學',召回同時包含“北京”和“大學”的文檔; query=default:'abc's efg'會解析失敗無結果,需要修改為'abc\'s efg'; query=default:'abc\',會查詢報錯無結果,\對'進行了轉義,到時引擎解析失敗;對於只用來做過濾篩選的需求,建議盡量將過濾欄位建索引,通過query子句來查詢,可以提高效能。
query=user_id:'123'&&filter=type_id=1,改寫為query=user_id:'123' AND type_id:'1'。在一些情況下,會查詢近一個月的資料,如果資料量較大,效能比較差,可以考慮使用range功能。
query=user_id:'123'&&filter=time>"2016-09-16" //符合user_id=123的有5千萬資料,但是根據時間過濾完只有1千。query召回量太大,很容易逾時 可以改為: query=user_id:'123' AND index_timestamp:(1473955200000,) //使用range查詢效率會高很多。查詢到具體的文檔後,引擎會去擷取實際要返回的結果資料,如果結果資料較大,那麼消耗的時間也會越大。這時,可以從哪個方面入手:1. 降低hit數,一般翻頁結果為20個;2. 修改預設展示欄位或者fetch_fields,僅返回搜尋結果展示中需要的欄位即可。