首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >elasticsearch排序nested_filter不匹配nested_path

elasticsearch排序nested_filter不匹配nested_path
EN

Stack Overflow用户
提问于 2016-02-26 09:19:29
回答 1查看 439关注 0票数 0

我有一个包含此表单项的索引。

代码语言:javascript
复制
{
        "_index": "identity-index",
        "_source": {
           "names": [
              "test"
           ],
           "private": {
              "lists": [
                 {
                    "listId": "56b8a0197f3c56654f8751b5",
                    "ratings": [
                       {
                          "rating": 4,
                          "authorId": "56499b7a97e3aa857cdc4f1d"
                       },
                       {
                          "rating": 4,
                          "authorId": "56b36646a24d50866de77928"
                       },
                       {
                          "rating": 4,
                          "authorId": "56cb16005082871b33ab1a60"
                       },
                       {
                          "rating": 4,
                          "authorId": "56b216a4c28edca956fe96d4"
                       },
                       {
                          "rating": 4,
                          "authorId": "56b34e8d8e324180259252f7"
                       }
                    ]
                 },
                 {
                    "listId": "56c1c508da49cdd9662b102c"
                 }
              ]
           }
        },
        "sort": [
           "-Infinity"
        ]
     }

我想根据listId的平均评级对它们进行排序:

我试过很多种方法,最接近的方法是:

代码语言:javascript
复制
"sort": {
                    "private.lists.ratings.rating": {
                          "missing": "_last",
                          "order": "desc",
                          "mode": "avg",
                          "nested_path": "private.lists.ratings",
                          "nested_filter": {
                            "term": {
                              "private.lists.listId": "56c1c508da49cdd9662b102c"
                            }
                          }
                    }
              },

问题是,这将所有的东西都打分为-Inf。我找不到任何方法来对private.lists.ratings中的嵌套元素进行排序,但要考虑到private.lists.listId的过滤器。nested_path和nested_filter字段是不同的,我认为它们不应该是这样的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-26 09:57:40

如果使用ratings类型分析nested字段,则可以通过在每个嵌套对象中复制listId来获得所需的内容。

不幸的是,嵌套对象不是主文档的一部分,nested_filter (和nested_sort)只能根据每个子文档中包含的属性消除歧义。

一个解决方案可能是将您的结构简化为一个简单的对象列表,如下所示

代码语言:javascript
复制
{
  "listId": "56b8a0197f3c56654f8751b5",
  "rating": 4,
  "authorId": "56499b7a97e3aa857cdc4f1d"
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35647745

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档