使用elasticsearch-dsl统计索引an字段唯一值时结果异常如何解决
调整方案
核心问题说明
你当前的代码没有取到聚合结果,是因为默认返回的es_data对象中,原始匹配文档存在hits属性里,聚合统计结果单独存放在aggs属性中,没有直接打印出来。同时代码中多余的sort逻辑对统计唯一值没有作用,可以直接删除,还可以新增size=0配置不返回原始文档,降低查询资源消耗。
修改后可运行代码
search = Search(using=client, index=index_name).query( { "range": { "date": { "gte": "2021-08-01T08:00:00.000Z", "lte": "2021-08-31T23:59:59.599Z" } } }) # 不返回原始匹配文档,仅获取聚合结果 search = search.extra(size=0) # 定义聚合统计an字段唯一值,聚合命名为unique_an search.aggs.metric("unique_an","cardinality",field="an") es_data = search.execute() # 从聚合结果中提取唯一值计数 an_count = es_data.aggs.unique_an.value print(f"an: {an_count}")
常见异常处理
如果运行时报错Fielddata is disabled on text fields by default,说明你的an字段是text类型,将聚合参数中的field="an"改为field="an.keyword"即可,Elasticsearch默认会为字符串字段生成keyword类型的子字段用于聚合统计。
内容的提问来源于stack exchange,提问作者chowpay
相关产品推荐
相关产品推荐

