Elasticsearch如何配置查询仅返回aggregations聚合结果不返回原始文档
解决方案
你之前调整_source参数不生效的核心原因是:_source仅能控制返回的原始命中文档(hits数组内的文档)包含哪些字段,无法关闭原始命中文档的返回逻辑。
要让响应仅返回aggregations聚合对象,只需要在查询请求的最外层加上"size": 0配置即可:
- 这个参数的作用是控制返回的原始匹配文档条数,设置为0时,ES会直接跳过原始文档的召回、结果组装流程,响应载荷里就不会再携带多条完整的原始文档,仅返回你定义的聚合结果。
查询示例
以按指定字段去重取文档的场景为例,完整查询写法如下:
POST 你的索引名/_search { "size": 0, "query": { // 替换为你实际使用的查询过滤条件 "match_all": {} }, "aggs": { "distinct_result": { "terms": { "field": "你用来做去重判断的字段名", "size": 200 // 配置需要返回的去重结果总条数 }, "aggs": { "target_doc": { "top_hits": { "size": 1, // 这里可以按需配置每个去重分组下返回的文档字段,不需要的字段可以不写 "_source": ["title", "content", "create_time"] } } } } } }
补充说明:如果你使用的是Elasticsearch 7.0以上版本,也可以用
collapse折叠参数实现字段去重,但如果需求是仅返回聚合结果、完全不展示外层原始命中列表,size: 0是全版本通用的兼容方案,没有版本兼容问题。
内容的提问来源于stack exchange,提问作者Stpete111
相关产品推荐
相关产品推荐

