sort子句
子句說明
用戶可以通過查詢語句控制結(jié)果的排序方式,包括指定排序的字段和升降序。
語法說明
排序子句格式為:+field1;-field2
field為要排序的字段,+為按字段值升序排序,-為降序排序;
field也支持簡單的算術(shù)運算,如+、-、*、\等,但參與運算的字段類型必須一致;
支持多維排序,中間用分號(;)分隔;多維排序的含義為,先按照第一維分?jǐn)?shù)排序,如果第一維分?jǐn)?shù)一樣,再按照第二維分?jǐn)?shù)進(jìn)行檔內(nèi)排序,以此類推。
field部分也可以為“RANK”,表示按照相關(guān)性(即排序表達(dá)式的計算分值)進(jìn)行排序。
注意事項
sort為非必選子句。如果不填,則默認(rèn)為sort=-RANK(按照相關(guān)性分值降序返回結(jié)果);如果顯式使用了sort子句,且子句中不包含RANK,那么定義了排序表達(dá)式也不會起作用;
在sort中出現(xiàn)的字段必須在定義應(yīng)用結(jié)構(gòu)的時候,創(chuàng)建為屬性;
返回值為數(shù)值型的(int或者float)功能性函數(shù)也可以在sort子句中使用;
literal 類型字段,英文字母按字母先后順序排序,數(shù)字按位置按個比較大小排序,中文按ASCII碼排序。
大部分場景下array類型字段均不支持。
多維sort(如:sort=-field1;-field2;-field3)排序性能與每一維排序的數(shù)據(jù)特點有關(guān),所以排序性能不能穩(wěn)定保證,推薦使用排序表達(dá)式做排序。例:設(shè)置精排:normalize(field1)*100+normalize(field2)*10+normalize(field3)+first_phase_score*10000 (表示獲取基礎(chǔ)排序表達(dá)式分?jǐn)?shù)) ,業(yè)務(wù)排序函數(shù),可點擊此處進(jìn)行查看。
功能性函數(shù)使用
distance: 獲取兩個點之間的球面距離。一般用于LBS的距離計算。
舉例:
查找用戶搜索的外婆家,并按照距離由近及遠(yuǎn)排序:
query=default:'外婆家'&&sort=+distance(lon,lat,"120.34256","30.56982")
tag_match: 用于對查詢語句和文檔做標(biāo)簽匹配,使用匹配結(jié)果對文檔進(jìn)行算分加權(quán)
舉例:(詳細(xì)案例可點擊上方鏈接)
sort=-tag_match("user_options", options, "mul", "sum", "false", "true", 100)。
示例
查找應(yīng)用中包含“浙大”的文檔,并按照type進(jìn)行升序排序,如果type相同,則按照文本相關(guān)性進(jìn)行排序(參考配置排序表達(dá)式):
query=default:'浙大'&&sort=+type;-RANK //精排表達(dá)式可以為text_relevance(fileld)
查找應(yīng)用中包含“浙大”的文檔,并按照hits(點擊)和comments(評論數(shù))總和降序排序:
query=default:'浙大'&&sort=-(hits+comments)