全部產品
Search
文件中心

OpenSearch:搜尋

更新時間:Jul 13, 2024

搜尋最佳化

這裡主要介紹在實際查詢過程中可能遇到的各種情況,及可以最佳化的方法。當您發現自己的搜尋效果不滿意或者不知道該如何?,請聯絡我們。

搜尋查詢的效果主要跟query關鍵詞中命中的文檔數有關,命中的文檔數越多,系統要進行的計算就越多,那麼耗時就會越高。所以最佳化的一個重要手段就是盡量降低query召回的文檔數。

  1. 查詢需要帶上索引名(應用結構中的“索引名”),否則將預設取default索引,如果沒有default,則直接報錯無結果。
    query='mp3'相當於query=default:'mp3'
  2. 查詢關鍵詞必須帶上單引號,否則很可能會報錯無結果。
    Error:  query=default:mp3
    Right:  query=default:'mp3'
  3. 如果查詢詞中包含’,則需要轉義或者去掉;2,查詢詞的最後一個字元不能是’\’,否則會被當成轉義符從而查詢報錯,如果要搜尋’\’,需要對’\’進行轉義。

    query=default:'北京大學',召回同時包含“北京”和“大學”的文檔;
    query=default:'abc's efg'會解析失敗無結果,需要修改為'abc\'s efg';
    query=default:'abc\',會查詢報錯無結果,\對'進行了轉義,到時引擎解析失敗;
  4. 對於只用來做過濾篩選的需求,建議盡量將過濾欄位建索引,通過query子句來查詢,可以提高效能。

    query=user_id:'123'&&filter=type_id=1,改寫為query=user_id:'123' AND type_id:'1'。
  5. 在一些情況下,會查詢近一個月的資料,如果資料量較大,效能比較差,可以考慮使用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查詢效率會高很多。
  6. 查詢到具體的文檔後,引擎會去擷取實際要返回的結果資料,如果結果資料較大,那麼消耗的時間也會越大。這時,可以從哪個方面入手:1. 降低hit數,一般翻頁結果為20個;2. 修改預設展示欄位或者fetch_fields,僅返回搜尋結果展示中需要的欄位即可。