如果没有指定sort选项,最后返回匹配文档的时候,按照_score取值的降序来排序
排序时用keyword、数字类型等字段,多值和分析字段上不可以。
也可以使用脚本。
POST /get-together/_search
{
"query": {
"match_all": {}
},
"sort": [
{
"reviews": {
"order": "asc"
}
},
{
"date": {
"order": "asc"
}
},
{
"_score": {
"order": "desc"
}
}
]
}
POST http://192.168.94.151:9200/secisland/_doc/_search
{
"sort": [
{
"date": {
"order": "desc"
}
},
{
"title": {
"order": "asc"
}
}
]
}
or
{
"sort": {
"date": {
"order": "desc"
},
"title": {
"order": "asc"
}
}
}
or
{
"sort": {
"date": "desc",
"title": "asc"
}
}
当一个字段的内容有多个值的时候,系统支持一些计算进行排序。包括min、max、sum、avg、mediam。例如下面请求标识price有多个值:
{
"sort": {
"date": {
"order": "desc",
"mode": "avg"
}
}
}
脚本排序,尽管这个功能很强大,使用function_score更合适。所有相关性的变化都是集中在单独的一个地方(查询中),而不是在排序功能里。如果脚本比较复杂,可以看看是否能把值抽成一个字段,然后对这个字段排序。
POST /get-together/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"description": "elasticsearch"
}
},
{
"exists": {
"field": "reviews"
}
}
]
}
},
"sort": [
{
"_script": {
"script": "doc['reviews'].value",
"type": "number",
"order": "desc"
}
}
]
}
\