我在嵌套字段上执行某个聚合时遇到问题。
我有一个嵌套类型的字段,它包含一个对象数组。我想做的是:
在字段上聚合以查找包含特定值的所有嵌套文档,然后反向嵌套回根,向我提供具有我正在寻找的嵌套字段对象的整个根文档集。
然后,针对相同的嵌套字段进一步聚合该组文档,这次针对不同的值。
目的是建立一个类似于漏斗的东西,我会根据嵌套的字段,使用越来越多的标准缩小聚合范围。
似乎发生的事情是,当执行我的第二个嵌套的agg时,它本身带有嵌套的> reverse_nested agg,看起来好像它再也看不到任何嵌套字段了。如果您运行这个简单的CURL,请查看' into_nested_again'的值。它是0,但它应该是3,就像原始' into_nested'的价值一样。 AGG。我想我可以通过构建完全独立的聚合和AND过滤器来解决这个问题,但是它会更加干净并且难以解析。这是一个错误还是我错过了什么?
curl -XDELETE "http://localhost:9200/nested-test"
curl -XPUT "http://localhost:9200/nested-test" -d'
{
"mappings": {
"my_type": {
"properties": {
"my_nested_field": {
"type": "nested"
}
}
}
}
}'
curl -XPOST "http://localhost:9200/nested-test/my_type" -d'
{
"my_nested_field" : [
{
"my_key": "value1"
}
]
}'
curl -XPOST "http://localhost:9200/nested-test/my_type" -d'
{
"my_nested_field" : [
{
"my_key": "value1"
},
{
"my_key": "value2"
}
]
}'
curl -XGET "http://localhost:9200/nested-test/_search" -d'
{
"aggs": {
"into_nested": {
"nested": {
"path": "my_nested_field"
},
"aggs": {
"by_value1": {
"filter": {
"term": {
"my_nested_field.my_key": "value1"
}
},
"aggs": {
"by_parent": {
"reverse_nested": {}
, "aggs": {
"into_nested_again": {
"nested": {
"path": "my_nested_field"
}
}
}
}
}
}
}
}
}
}'
答案 0 :(得分:1)
我想我正在接近这个错误。而不是使用'嵌套'作为更高级别的agg,如果我从过滤器开始,然后在其中放置嵌套的agg,我得到预期的结果:
curl -XGET "http://localhost:9200/nested-test/_search" -d'
{
"aggs": {
"by_value1": {
"filter": {
"nested": {
"path": "my_nested_field",
"filter": {
"term": {
"my_nested_field.my_key": "value1"
}
}
}
},
"aggs": {
"by_value2": {
"filter": {
"nested": {
"path": "my_nested_field",
"filter": {
"term": {
"my_nested_field.my_key": "value2"
}
}
}
}
}
}
}
}
}'