Elasticsearch按对象数组排序

4
我有一列名为engagement的数据,还有其他列。
记录1。
"date":"2017-11-23T06:46:04.358Z",
"remarks": "test1",
"engagement": [
    {
      "name": "comment_count",
      "value": 6
    },
    {
      "name": "like_count",
      "value": 2
    }
  ],
  ....
  ....

记录 2

  "date":"2017-11-23T07:16:14.358Z",
  "remarks": "test2",
  "engagement": [
    {
    "name": "comment_count",
    "value": 3
    },
    {
    "name": "like_count",
    "value": 9
    }
  ],
  ....
  ....

我正在以数组格式存储对象,现在我想按照任何给定对象名称的降序对数据进行排序,例如like_count的值或share_count的值。
因此,如果我按like_count排序,则第二条记录应该出现在第一条记录之前,因为第二条记录的like_count值为9,而第一条记录的like_count值为2。
如何在elasticsearch中实现这一点?

如果你有一个单一的字段,将值本身和名称组合起来,并对其进行排序,那么你会更好。 - Andrei Stefan
我有多种参与值(例如分享数、关注者、关注数、覆盖范围等),如果我创建列,那么每次出现新的参与键时都必须创建新的列。当前结构支持任何类型的参与值,只需在数组中附加键/值即可,无需创建新列。 - Mohd Shahid
我理解你的意思,这样做确实更舒适 :-)。但是从性能上来看,你不会因此而得到更好的结果。 - Andrei Stefan
为什么它没有按预期工作,因为它应该这样做? - Andrei Stefan
“engagement” 应该是 “nested” 类型,我假设你已经这样设置了。但是重新阅读你的帖子,我没有看到它在任何地方提到。它应该是 “nested” 类型。像这样: "engagement": { "type": "nested", "properties": { "name": { "type": "keyword" }, "value": { "type": "integer" } } } - Andrei Stefan
显示剩余2条评论
1个回答

3
你应该有类似以下的东西:
{
  "query": {
    "nested": { 
      "path": "engagement",
      "filter": {
        ...somefilter...
      }
    }
  },
  "sort": {
    "engagement.name": { 
      "order": "desc",   
      "mode":  "min",   
      "nested_filter": { 
        ...same.filter.as.before
      }
    }
  }
}

Source: Elastic Docs


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接