Elasticsearch过滤field1/field2后,如何获取field3的唯一值?
获取指定条件下field3的所有唯一值
问题说明
你用collapse失败是因为目标字段没有可用于折叠的映射——通常是field3为text类型,既没启用fielddata,也没有对应的keyword子字段。而你当前的查询会返回匹配文档,是因为没设置size: 0,默认会返回10条文档,但聚合结果其实已经在响应的aggregations节点里了。
正确查询方案
调整查询,关闭文档返回,确保聚合字段为可聚合类型:
GET my_index/_search { "size": 0, // 不返回匹配文档,只输出聚合结果 "query": { "bool": { "filter": [ { "match_phrase": { "field1": "value1" } }, { "match_phrase": { "field2": "value2" } }, { "range": { "timestamp": { "gte": "now-4d", "lte": "now" } } } ] } }, "aggs": { "unique_field3_values": { "terms": { "field": "field3.keyword", // 若field3是text类型,用其keyword子字段;本身是keyword类型则直接写field3 "size": 10000 // 设置足够大的数值获取所有唯一值,默认上限10000,超过需修改index.max_terms_count参数 } } } }
额外提示
- 聚合结果会出现在响应的
aggregations.unique_field3_values.buckets中,每个bucket的key就是field3的唯一值。 - 如果需要获取超过10000个唯一值,需先修改索引的
index.max_terms_count参数,再调整size数值。
内容的提问来源于stack exchange,提问作者rosierose12
相关产品推荐
相关产品推荐

