示例文档中有一个简化的文档。这对我理解非嵌套类型与嵌套类型的聚合差异很有帮助。但是,这种简化掩盖了进一步的复杂性,因此我不得不在这里扩展这个问题。
所以我的实际文件更接近以下内容:
"_source": { "keyword": "my keyword", "response": [ { "results": [ { "items": [ { "prop": [ { "item_property_1": ["A"], } ] ( ... other properties ) }, { "prop": [ { "item_property_1": ["B"], } ] ( ... other properties ) }, ( ... other items ) ] } ], ( ... other properties ) } ] }
因此,我保留了,和的关键属性keyword,但隐藏了许多其他使情况复杂化的内容。首先,请注意,与引用的问题相比,有很多额外的嵌套:在根和“项目”之间,以及在“项目”和“ item_property_1”之间。此外,还请注意,属性和都是具有单个元素的数组。这很奇怪,但是事实就是这样:-)items``item_property_1``response``results
keyword
items``item_property_1``response``results
现在,这个问题与上面引用的问题不同的原因是,我尝试了接受的答案(确实适用于此处的示例),并且在这里不起作用。也就是说,如果我使用以下映射:
"items": { "type":"nested", "properties": { "prop": { "properties": { "item_property_1": { "type": "string", "index": "not_analyzed" }, } } } }
那么聚合将不起作用。它返回零命中。
稍后,我将进行编辑并提供可立即使用的批量插入示例。
编辑:好的,下面我显示三个查询,分别是:映射,批量插入和聚合(零命中)
映射("type":"nested"如先前回答的问题所示)
"type":"nested"
PUT /test2/_mapping/test3 { "test3": { "properties": { "keyword": { "type": "string", "index": "not_analyzed" }, "response": { "properties": { "results": { "properties": { "items": { "type": "nested", "properties": { "prop": { "properties": { "item_property_1": { "type": "string", "index": "not_analyzed" } } } } } } } } } } } }
批量投放:
PUT /test2/test3/_bulk { "index": {}} { "keyword": "my keyword", "response": [ { "results": [ { "items": [ { "prop": [ {"item_property_1": ["A"]} ] }, { "prop": [ {"item_property_1": ["B"]} ] }, { "prop": [ {"item_property_1": ["A"]} ] } ] } ] } ]} { "index": {}} { "keyword": "different keyword", "response": [ { "results": [ { "items": [ { "prop": [ {"item_property_1": ["A"]} ] }, { "prop": [ {"item_property_1": ["C"]} ] } ] } ] } ]}
汇总(零点击):
POST /test2/test3/_search { "size":0, "aggregations": { "item_property_1_count": { "terms":{ "field":"item_property_1" } } } }
它与先前的答案并没有真正的不同。您需要做的就是稍微修改字段名称,以考虑其他嵌套。除此之外,映射中无需进行任何更改。请注意,此查询无需映射更改就可以工作,因为response和results都是带有单个元素的数组,如果不是这种情况,它将涉及更多问题,并且需要映射更改和其他查询。
response
results
现在查询如下所示:
{ "size": 0, "aggregations": { "by_keyword": { "terms": { "field": "keyword" }, "aggs": { "prop_1_count": { "nested": { "path": "response.results.items" }, "aggs": { "prop_1": { "terms": { "field": "response.results.items.prop.item_property_1" } } } } } } } }
结果:
{ ... "aggregations" : { "by_keyword" : { "doc_count_error_upper_bound" : 0, "sum_other_doc_count" : 0, "buckets" : [ { "key" : "different keyword", "doc_count" : 1, "prop_1_count" : { "doc_count" : 2, "prop_1" : { "doc_count_error_upper_bound" : 0, "sum_other_doc_count" : 0, "buckets" : [ { "key" : "A", "doc_count" : 1 }, { "key" : "C", "doc_count" : 1 } ] } } }, { "key" : "my keyword", "doc_count" : 1, "prop_1_count" : { "doc_count" : 3, "prop_1" : { "doc_count_error_upper_bound" : 0, "sum_other_doc_count" : 0, "buckets" : [ { "key" : "A", "doc_count" : 2 }, { "key" : "B", "doc_count" : 1 } ] } } } ] } } }