Python Elasticsearch Client聚合查询设置size=0仅返回聚合结果问题
解决方案
你之前的写法把size参数放在聚合bucket的配置里是错误的,这个位置的size是用来控制terms聚合返回的桶数量,不是控制查询返回的命中记录条数。
正确的配置方式是调用Search对象的extra()方法传入全局查询参数size=0,完整代码如下:
from elasticsearch import Elasticsearch from elasticsearch_dsl import Search es = Elasticsearch() # 先构造Search对象,通过extra设置size=0,再配置聚合 s = Search(using=es, index="employee-index").extra(size=0) s.aggs.bucket('gender', 'terms', field='gender.keyword') response = s.execute() # 直接获取聚合结果 print(response.aggregations.gender.buckets)
原理说明
extra()方法用来传入所有Elasticsearch DSL查询顶层的参数,除了size之外,from、timeout等顶层参数都可以通过这个方法传入- 设置
size=0后,ES不会返回任何原始命中记录,只会返回聚合统计结果,和你原生DSL查询的效果完全一致
内容的提问来源于stack exchange,提问作者harshit
相关产品推荐
相关产品推荐

