ElasticSearch使用求和对多个字段进行排序

时间:2016-06-06 16:57:11

标签: php elasticsearch

我正在使用“过滤”查询进行搜索,然后想要对3列的SUM进行排序。

例如:

"query": {
    ...
},
"sort": {
    view_count + comment_count + like_count
    order: DESC
}

结果应按上述3个计数之和的降序排列。

如何实现SUM的列然后对结果进行排序。

感谢任何帮助。

2 个答案:

答案 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"
  }
}}

来源:Script-based Sorting