繁体   English   中英

在弹性搜索中添加条件以过滤聚合

[英]Add condition to filter aggregation in elastic search

我想要基于弹性搜索中应用的某些过滤器对变量的每个值进行计数。 例如,我想要所有年龄段的学生,但要过滤掉来自加利福尼亚的学生。

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

"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" } }
            }
        }
    }
}

向您的部队寻求帮助。

这是因为没有称为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更合适。 修复了映射关系后(该texttext而不是keyword ),该查询可以正确计算出

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM