全部產品
Search
文件中心

OpenSearch:sort子句

更新時間:Jul 13, 2024

子句說明

使用者可以通過查詢語句控制結果的排序方式,包括指定排序的欄位和升降序。

文法說明

排序子句格式為:+field1;-field2

  • field為要排序的欄位,+為按欄位值升序排序,-為降序排序;

  • field也支援簡單的算術運算,如+、-、*、\等,但參與運算的欄位類型必須一致;

  • 支援多維排序,中間用分號(;)分隔;多維排序的含義為,先按照第一維分數排序,如果第一維分數一樣,再按照第二維分數進行檔內排序,以此類推。

  • field部分也可以為“RANK”,表示按照相關性(即排序運算式的計算分值)進行排序。

注意事項

  1. sort為非必選子句。如果不填,則預設為sort=-RANK(按照相關性分值降序返回結果);如果顯式使用了sort子句,且子句中不包含RANK,那麼定義了排序運算式也不會起作用;

  2. 在sort中出現的欄位必須在定義應用結構的時候,建立為屬性;

  3. 傳回值為數值型的(int或者float)功能性函數也可以在sort子句中使用;

  4. literal 類型欄位,英文字母按字母先後順序排序,數字按位置按個比較大小排序,中文按ASCII碼排序。

  5. 大部分情境下array類型欄位均不支援。

  6. 多維sort(如:sort=-field1;-field2;-field3)排序效能與每一維排序的資料特點有關,所以排序效能不能穩定保證,推薦使用排序運算式做排序。例:設定精排:normalize(field1)*100+normalize(field2)*10+normalize(field3)+first_phase_score*10000 (表示擷取基礎排序運算式分數) ,業務排序函數,可點擊此處進行查看。

功能性函數使用

  • distance: 擷取兩個點之間的球面距離。一般用於LBS的距離計算。

舉例

尋找使用者搜尋的外婆家,並按照距離由近及遠排序:

query=default:'外婆家'&&sort=+distance(lon,lat,"120.34256","30.56982")
  • tag_match: 用於對查詢語句和文檔做標籤匹配,使用匹配結果對文檔進行算分加權

舉例:(詳細案例可點擊上方連結)

sort=-tag_match("user_options", options, "mul", "sum", "false", "true", 100)。

樣本

  1. 尋找應用中包含“浙大”的文檔,並按照type進行升序排序,如果type相同,則按照文本相關性進行排序(參考配置排序運算式):

     query=default:'浙大'&&sort=+type;-RANK    //精排運算式可以為text_relevance(fileld)
  2. 尋找應用中包含“浙大”的文檔,並按照hits(點擊)和comments(評論數)總和降序排序:

     query=default:'浙大'&&sort=-(hits+comments)