我正在使用“过滤”查询进行搜索,然后想要对3列的SUM进行排序。
例如:
"query": {
...
},
"sort": {
view_count + comment_count + like_count
order: DESC
}
结果应按上述3个计数之和的降序排列。
如何实现SUM的列然后对结果进行排序。
感谢任何帮助。
答案 0 :(得分:2)
如果您无法更改数据/无法控制映射/三个字段正在更改(即它们不会插入并忘记),请使用script sorting。
{
"sort": {
"_script": {
"type": "number",
"script": "return doc['view_count'].value + doc['comment_count'].value + doc['like_count'].value,
"lang": "groovy",
"order": "desc"
}
}
}
如果您经常更新文档,您还可以添加另一个字段 - 让我们称之为sum
- 您已经在其中索引了三个字段的总和。然后,您只需对sum
字段进行排序。
答案 1 :(得分:0)
就我而言(Elasticsearch 5.6),下面的代码按多个字段的总和排序。
GET /_search
{
"query" : {
"term" : { "user" : "kimchy" }
},
"sort" : {
"_script" : {
"type" : "number",
"script" : {
"lang": "painless",
"source": "doc['retweet_count'].value + doc['favorite_count'].value"
},
"order" : "desc"
}
}}