如何在Elasticsearch中统计嵌套字段下各type子字段的条目数?
Elasticsearch嵌套字段type的条目统计方案
你的Elasticsearch文档包含嵌套的Volume字段,需要统计其中type子字段的每个值的条目数,但当前使用的cardinality聚合仅返回了不同type的数量,无法满足需求。
你当前用的cardinality聚合是用来统计字段的不同值数量的,所以得到的是9种不同的type类型,而不是每个type的条目计数。要统计每个type的出现次数,需要把cardinality换成terms聚合,具体查询语句如下:
{ "size": 0, "aggs": { "nested_properties": { "nested": { "path": "Volume" }, "aggs": { "type_counts": { "terms": { "field": "Volume.type.keyword", "size": 10 // 可根据实际type数量调整 } } } } } }
关键说明:
terms聚合会按照Volume.type的不同值进行分组,统计每个值对应的条目数- 必须使用
Volume.type.keyword字段(假设你的mapping中type字段同时包含text和keyword子字段),否则text字段的分词会导致统计结果不符合预期 size参数用来指定返回的分组数量,默认是10,可根据实际存在的type类型数量调整
执行后会得到符合你预期的结果,示例如下:
"aggregations": { "nested_properties": { "doc_count": 5, "type_counts": { "buckets": [ { "key": "south", "doc_count": 2 }, { "key": "north", "doc_count": 2 }, { "key": "west", "doc_count": 1 } ] } } }
内容的提问来源于stack exchange,提问作者Steve
相关产品推荐
相关产品推荐

