elasticsearch - 在弹性搜索中添加条件以过滤聚合
问题描述
我想根据弹性搜索中应用的一些过滤器计算变量的每个值。例如,我想要所有年龄组,但在过滤器上的学生来自加利福尼亚。
年龄组是文本字段,包含这样的数组,
"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
. 修复映射(而text
不是keyword
)后,查询正确运行
推荐阅读
- angular - 模块构建失败:错误:调试失败。虚假表达
- python - Python Pandas:导出到 excel 格式一行“粗体”,无条件
- r - 闪亮,R:复选框,geom_hline,ggplot
- node.js - 错误 500:尝试使用 GAE Flexible 将文件上传到 GCS 时出现 ApiError
- c# - 将两个 do while 循环组合成一个或任何更好的重构
- html - 字体系列中的字体有限制吗?
- javascript - 基于Angular中的按钮单击移动文本区域
- scala - 远程 Spark 连接 - Scala:找不到 BlockManagerMaster
- php - Laravel 5.5 和 Vue.js 刀片测试
- php - 在codeigniter中更改登录用户的密码