我有一些我想要一起排序的字段,因此它们具有相同的优先级。
目前我的排序如下:
"sort": [
{
"stats.favoriteCount": {
"order": "desc",
"missing": 0
},
"stats.likeCount": {
"order": "desc",
"missing": 0
}
}
]
我的问题是favoriteCount
将始终首先被处理,即使likeCount
的值更高。
因此对于2个文件:
1: {"stats.favoriteCount": 50, "likeCount": 0}
2: {"stats.favoriteCount": 0, "likeCount": 70}
自从Elasticsearch将排序转换为:[50,0]和[0,70]后,第一个文档的排名会更高。
我可以在排序方式中以某种方式将这两个字段视为等号吗?
答案 0 :(得分:1)
我认为你需要脚本排序。像这样:
{
"sort": {
"_script": {
"type": "number",
"script": "if (doc['stats.favoriteCount'].value>doc['stats.likeCount'].value) return doc['stats.favoriteCount'].value; return doc['stats.likeCount'].value;",
"lang": "groovy",
"order": "desc"
}
}
}
答案 1 :(得分:0)
我已将Andrei Stefan's answer(谢谢!)修改为:
{
"sort": {
"_script": {
"type": "number",
"script": "return max(doc['stats.favoriteCount'].value,doc['stats.likeCount'].value)",
"lang": "groovy",
"order": "desc"
}
}
}