子句說明
使用者可以通過查詢語句控制結果的排序方式,包括指定排序的欄位和升降序。
文法說明
排序子句格式為:+field1;-field2
field為要排序的欄位,+為按欄位值升序排序,-為降序排序;
field也支援簡單的算術運算,如+、-、*、\等,但參與運算的欄位類型必須一致;
支援多維排序,中間用分號(;)分隔;多維排序的含義為,先按照第一維分數排序,如果第一維分數一樣,再按照第二維分數進行檔內排序,以此類推。
field部分也可以為“RANK”,表示按照相關性(即排序運算式的計算分值)進行排序。
注意事項
sort為非必選子句。如果不填,則預設為sort=-RANK(按照相關性分值降序返回結果);如果顯式使用了sort子句,且子句中不包含RANK,那麼定義了排序運算式也不會起作用;
在sort中出現的欄位必須在定義應用結構的時候,建立為屬性;
傳回值為數值型的(int或者float)功能性函數也可以在sort子句中使用;
literal 類型欄位,英文字母按字母先後順序排序,數字按位置按個比較大小排序,中文按ASCII碼排序。
大部分情境下array類型欄位均不支援。
多維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)。
樣本
尋找應用中包含“浙大”的文檔,並按照type進行升序排序,如果type相同,則按照文本相關性進行排序(參考排序策略配置):
query=default:'浙大'&&sort=+type;-RANK //精排運算式可以為text_relevance(fileld)
尋找應用中包含“浙大”的文檔,並按照hits(點擊)和comments(評論數)總和降序排序:
query=default:'浙大'&&sort=-(hits+comments)