如何在Elasticsearch查询中获取penny字段的唯一结果?
基于Elasticsearch的penny字段获取唯一结果解决方案
你的现有查询已经能筛选出包含penny字段的文档,要基于该字段获取唯一结果,可通过以下两种常用方式实现:
方法一:使用collapse折叠字段(返回完整文档)
适合需要直接获取每个唯一penny值对应文档的场景,会按penny值分组,每组返回第一条匹配的文档:
{ "query": { "exists": { "field": "penny" } }, "collapse": { "field": "penny" }, "from": 0, "size": 100 }
size控制返回的唯一分组数量,from用于分页查询更多结果- 若
penny是text类型,需替换为其keyword子字段(如penny.keyword),否则会因分词导致去重不准确
方法二:使用聚合(灵活获取唯一值或对应文档)
仅获取唯一的penny值
如果只需要所有不重复的penny值,可通过terms聚合实现,不返回原始文档:
{ "query": { "exists": { "field": "penny" } }, "size": 0, "aggs": { "unique_penny_values": { "terms": { "field": "penny", "size": 10000 // 调整size获取更多唯一值,默认仅返回前10个 } } } }
获取每个唯一penny值对应的完整文档
结合terms聚合和top_hits子聚合,可自定义每组返回的文档内容:
{ "query": { "exists": { "field": "penny" } }, "size": 0, "aggs": { "unique_penny_groups": { "terms": { "field": "penny", "size": 100 }, "aggs": { "top_hit": { "top_hits": { "size": 1 // 每组仅返回一条文档,可调整返回数量 } } } } } }
内容的提问来源于stack exchange,提问作者Abhinav Arya
相关产品推荐
相关产品推荐

