首页 > 解决方案 > 在弹性搜索中添加条件以过滤聚合

问题描述

我想根据弹性搜索中应用的一些过滤器计算变量的每个值。例如,我想要所有年龄组,但在过滤器上的学生来自加利福尼亚。

年龄组是文本字段,包含这样的数组,

"age_group": ["5-6-years", "6-7-years"]

我有点想要这样的查询,但这不起作用。它抛出一个错误说

无法解析名称为 [count] 的 BaseAggregationBuilder:找不到解析器

"student_aggregation": {
    "nested": {
        path": "students"
    },
    "aggs": {
        "available": {
            "filter": {
                "term": { "students.place_of_birth": "California" }
            },
            "aggs" : {
                "age_group" : { "count" : { "field" : "students.age_group" } }
            }
        }
    }
}

向你的部队请求帮助。

标签: elasticsearch

解决方案


那是因为没有调用度量聚合count,而是value_count

"student_aggregation": {
    "nested": {
        path": "students"
    },
    "aggs": {
        "available": {
            "filter": {
                "term": { "students.gender": "boys" }
            },
            "aggs" : {
                "age_group" : { "value_count" : { "field" : "students.age_group" } }
                                     ^^^
                                     |||
            }
        }
    }
}

更新

经过讨论,terms聚合比value_count. 修复映射(而text不是keyword)后,查询正确运行


推荐阅读