Elasticsearch按几个字段名称排序

时间:2016-06-01 09:42:51

标签: sorting elasticsearch

我有一些我想要一起排序的字段,因此它们具有相同的优先级。

目前我的排序如下:

"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]后,第一个文档的排名会更高。

我可以在排序方式中以某种方式将这两个字段视为等号吗?

2 个答案:

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