在 Elasticsearch 中, 相關性得分 由一個浮點數進行表示,並在搜索結果中經過 _score 參數返回
默認排序是 _score 降序elasticsearch
有時,相關性評分對你來講並無意義。例如,下面的查詢返回全部 user_id 字段包含 1 的結果:code
GET /_search { "query" : { "bool" : { "filter" : { "term" : { "user_id" : 1 } } } } }
若是不須要爲0分排序
GET /_search { "query" : { "constant_score" : { "filter" : { "term" : { "user_id" : 1 } } } } }
經過時間來對 tweets 進行排序是有意義的,最新的 tweets 排在最前。 咱們能夠使用 sort 參數進行實現:索引
GET /_search { "query" : { "bool" : { "filter" : { "term" : { "user_id" : 1 }} } }, "sort": { "date": { "order": "desc" }} }
能夠簡寫爲文檔
"sort": "number_of_children"
字段將會默認升序排序 ,而按照 _score 的值進行降序排序。字符串
排序條件的順序是很重要的。結果首先按第一個條件排序,僅當結果集的第一個 sort 值徹底相同時纔會按照第二個條件進行排序,以此類推。string
GET /_search { "query" : { "bool" : { "must": { "match": { "tweet": "manage text search" }}, "filter" : { "term" : { "user_id" : 2 }} } }, "sort": [ { "date": { "order": "desc" }}, { "_score": { "order": "desc" }} ] }
被解析的字符串字段也是多值字段, 可是不多會按照你想要的方式進行排序。
若是你想分析一個字符串,如 fine old art , 這包含 3 項。
咱們極可能想要按第一項的字母排序,而後按第二項的字母排序,諸如此類,
可是 Elasticsearch 在排序過程當中沒有這樣的信息。ast
一個簡單的方法是用兩種方式對同一個字符串進行索引,這將在文檔中包括兩個字段:
analyzed 用於搜索,
not_analyzed 用於排序date
"tweet": { "type": "string", "analyzer": "english" }
將上面的轉爲下面的格式搜索
"tweet": { "type": "string", "analyzer": "english", "fields": { "raw": { "type": "string", "index": "not_analyzed" } } }
使用 tweet 字段用於搜索,tweet.raw 字段用於排序
GET /_search { "query": { "match": { "tweet": "elasticsearch" } }, "sort": "tweet.raw" }