Elasticsearch动态属性字段聚合需求:按character_id及value_id统计
解决Elasticsearch动态属性嵌套聚合问题
首先确认你的product_characters字段必须是nested类型的映射,否则数组元素的character_id和value_id会被扁平化存储,导致两者的关联关系丢失,这大概率是你之前聚合失败的原因。
如果映射还不是nested类型,需要先修改(修改后要重新索引数据):
PUT /your_index/_mapping { "properties": { "product_characters": { "type": "nested", "properties": { "character_id": {"type": "keyword"}, "value_id": {"type": "keyword"} } } } }
接下来使用嵌套聚合实现需求:
GET /your_index/_search { "size": 0, // 不需要返回原始文档,只看聚合结果 "aggs": { "nested_characters": { "nested": { "path": "product_characters" // 指定nested字段路径 }, "aggs": { "group_by_character": { "terms": { "field": "product_characters.character_id", // 按属性类型分组 "size": 100 // 根据实际数据量调整,显示所有character_id的话设大一点 }, "aggs": { "group_by_value": { "terms": { "field": "product_characters.value_id" // 每个属性类型下按属性值分组统计 } } } } } } } }
结果说明
- 最外层的
nested_characters聚合会遍历每个文档中的product_characters数组元素,保持每个元素内character_id和value_id的关联。 group_by_character会统计每个character_id出现的总次数(对应属性类型的数量)。group_by_value作为嵌套聚合,会在每个character_id分组下,统计对应的value_id出现的次数。
内容的提问来源于stack exchange,提问作者Javohir Elmurodov
相关产品推荐
相关产品推荐

