【发布时间】:2021-07-03 08:54:23
【问题描述】:
以下是数据集的快照:
recordNo employeeId employeeStatus employeeAddr
1 employeeA Permanent
2 employeeA ABC
3 employeeB Contract
4 employeeB CDE
我想获取员工列表以及employeeStatus 和employeeAddr。
所以我在employeeId 上使用术语聚合,然后使用employeeStatus 和employeeAddr 的子聚合来获取这些详细信息。 下面的查询正确返回结果。
{
"aggregations": {
"Employee": {
"terms": {
"field": "employeeID"
},
"aggregations": {
"employeeStatus": {
"terms": {"field": "employeeStatus"}
},
"employeeAddr": {
"terms": {"field": "employeeAddr"}
}
}
}
}
}
现在我只想要永久身份的员工。所以我正在应用过滤器聚合。
{
"aggregations": {
"filter_Employee_employeeID": {
"filter": {
"bool": {
"must": [
{
"match": {
"employeeStatus": {"query": "Permanent"}
}
}
]
}
},
"aggregations": {
"Employee": {
"terms": {
"field": "employeeID"
},
"aggregations": {
"employeeStatus": {
"terms": {"field": "employeeStatus"}
},
"employeeAddr": {
"terms": {"field": "employeeAddr"}
}
}
}
}
}
}
}
现在的问题是employeeAddr 聚合没有为employeeA 返回任何桶,因为在聚合完成之前记录2 被过滤掉了。
假设我无法修改数据集,我想通过单个弹性查询来达到结果,我该怎么做?
我检查了 Bucket Selector 管道聚合,但它仅适用于指标聚合。 有没有办法在应用聚合后过滤掉术语桶?
【问题讨论】:
-
您期望的搜索结果是什么?
-
我需要永久雇员的所有详细信息。因此,例如,预期的输出是应返回employeeA 存储桶,并且在子聚合中,应返回用于employeeStatus 的存储桶“Permanent”和用于employeeAddr 的存储桶“ABC”。目前在结果中,employeeAddr 下没有重新调整“ABC”存储桶,因为过滤器 agg 中的查询删除了数据集的记录 2。
标签: elasticsearch elasticsearch-aggregation