ES:定制搜索结果的排序规则
1、默认排序规则
默认情况下,是按照_score降序排序的
GET /_search
{
"query": {
"bool": {
"filter": {
"term": {
"author_id": 110
}
}
}
}
}
GET /_search
{
"query": {
"constant_score": {
"filter": {
"term": {
"author_id": 110
}
}
}
}
}
2、定制排序规则
GET /company/employee/_search
{
"query": {
"constant_score": {
"filter": {
"range": {
"age": {
"gte": 30
}
}
}
}
},
"sort": [
{
"join_date": {
"order": "asc"
}
}
]
}
3、field索引两次来解决字符串排序问题
如果对一个string field进行排序,结果往往不准确,因为分词后是多个单词,再排序就不是我们想要的结果了
通常解决方案是,将一个string field建立两次索引,一个分词,用来进行搜索;一个不分词,用来进行排序
GET /website/article/_search
{
"query": {
"match_all": {}
},
"sort": [
{
"title.raw": {
"order": "desc"
}
}
]
}