Elasticsearch:聚合已过滤的嵌套对象以查找唯一值 [英] Elasticsearch: Aggregation on filtered nested objects to find unique values

查看:1050
本文介绍了Elasticsearch:聚合已过滤的嵌套对象以查找唯一值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在Elasticsearch 5的每个文档中都有一个对象(标签)数组:

  {
标签:[
{key:tag1,value:val1},
{key:tag2,value:val2},
...
]
}

现在我想查找唯一标签某个标签键的值。类似于这个SQL查询的东西:



SELECT DISTINCT(tags.value)FROM tags WHERE tags.key ='some-key'

到目前为止,我已经到过这个DSL:

  {
size:0,
aggs:{
my_tags:{
嵌套:{
path:tags

aggs:{
filter:{terms:{tags.key:tag1}},
aggs: {
my_tags_values:{
terms:{
field:tags.value,
size:9999
}
}
}
}
}
}
}

但它向我显示了这个错误:
$ b $ p $ lt; code> [terms] unknown field [tags.key],parser not found



这是解决问题的正确方法吗?感谢您的帮助。



注意:我已将标签字段声明为嵌套字段在我的映射。

解决方案

您可能需要添加一个过滤器聚合,但您没有任何名称:

  {
size:0,
aggs:{
my_tags:{
嵌套:{
路径:tags
},
aggs:{
my_filter:{
filter:{
terms:{
tags.key:[
tag1
]
}
},
aggs:{
my_tags_values:{
条款:{
字段:tags.value,
大小:9999
}
}
}
}
}
}
}
}


I have an array of objects (tags) in each document in Elasticsearch 5:

{
    "tags": [
        { "key": "tag1", "value": "val1" },
        { "key": "tag2", "value": "val2" },
        ...
    ]
}

Now I want to find unique tag values for a certain tag key. Something similiar to this SQL query:

SELECT DISTINCT(tags.value) FROM tags WHERE tags.key='some-key'

I have came to this DSL so far:

{
    "size": 0,
    "aggs": {
        "my_tags": {
            "nested": {
                "path": "tags"
            },
            "aggs": {
                "filter" : { "terms": { "tags.key": "tag1" } },
                "aggs": {
                    "my_tags_values": {
                        "terms" : {
                            "field" : "tags.value",
                            "size": 9999
                         }
                    }                   
                }
            }
        }
    }
}

But It is showing me this error:

[terms] unknown field [tags.key], parser not found.

Is this the right approach to solve the problem? Thanks for your help.

Note: I have declared the tags field as a nested field in my mapping.

解决方案

You mixed up things there. You wanted probably to add a filter aggregation, but you didn't give it any name:

{
  "size": 0,
  "aggs": {
    "my_tags": {
      "nested": {
        "path": "tags"
      },
      "aggs": {
        "my_filter": {
          "filter": {
            "terms": {
              "tags.key": [
                "tag1"
              ]
            }
          },
          "aggs": {
            "my_tags_values": {
              "terms": {
                "field": "tags.value",
                "size": 9999
              }
            }
          }
        }
      }
    }
  }
}

这篇关于Elasticsearch:聚合已过滤的嵌套对象以查找唯一值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆