全部產品
Search
文件中心

OpenSearch:搜尋與解析查詢結果

更新時間:Aug 22, 2026

本文為您介紹在OpenSearch中如何?搜尋最佳化以及如何解析查詢結果。

搜尋最佳化

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

搜尋查詢的效果主要跟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,僅返回搜尋結果展示中需要的欄位即可。

解析查詢結果

OpenSearch產品,出於功能更新迭代需要,會不定期推出新功能,或對已有功能更新最佳化,實現使用者的多樣化功能或效能需求。

說明

解析注意:

基於產品需要功能更新迭代,查詢結果中會根據需要,新增系統欄位(比如 searchtime,viewtotal 之類的欄位,就是系統欄位)。

請確保在解析查詢結果時,沒有依賴查詢結果中返回的欄位個數,只是按需解析需要的欄位。