elasticsearch - 用于多选的 Elasticsearch 聚合查询
问题描述
我有以下问题: 在我的应用程序中,我有多个用于过滤搜索结果的多选组合框。
根据过滤器中的选择,其他过滤器中的分面结果会减少。到目前为止,一切都很好。但是,对于组合框中的其他可能选择,结果也会脱脂:
在这里,我需要没有已经选择的结果的方面。在这个特定的领域。
到目前为止,我使用的查询如下所示:
{
"size": 0,
"query": {
"bool": {
"must": [
{
"exists": {
"field": "depictionID"
}
},
{
"terms": {
"cave.caveTypeID": [
4
]
}
},
{
"terms": {
"cave.siteID": [
1
]
}
},
{
"terms": {
"cave.districtID": [
1
]
}
},
{
"terms": {
"cave.regionID": [
1
]
}
}
]
}
},
"aggs": {
"CaveType": {
"terms": {
"field": "cave.caveTypeID"
}
},
"Region": {
"terms": {
"field": "cave.regionID"
}
},
"Site": {
"terms": {
"field": "cave.siteID"
}
},
"District": {
"terms": {
"field": "cave.districtID"
}
}
}
}
到目前为止,我认为我需要将选定的字段从查询中取出并在聚合部分中过滤它们。但是,我不明白,当两个或多个组合框已经有选择时,它是如何工作的。
有没有人有一个好主意,如何解决这个问题?
真挚地,
埃里克
解决方案
好吧,我确实通过将过滤器转移到聚合部分来解决问题,但是,我必须为每个组合框进行聚合,因为每个组合框都需要一个没有自己过滤器的聚合,因此聚合急剧增长:
{
"aggs": {
"caveType": {
"filter": {
"terms": {
"cave.districtID": [
4
]
}
},
"aggs": {
"site": {
"filter": {
"terms": {
"cave.siteID": [
1
]
}
},
"aggs": {
"caveType": {
"terms": {
"size": 10000,
"field": "cave.caveTypeID"
}
}
}
}
}
},
"site": {
"filter": {
"terms": {
"cave.districtID": [
4
]
}
},
"aggs": {
"caveType": {
"filter": {
"terms": {
"cave.caveTypeID": [
4
]
}
},
"aggs": {
"site": {
"terms": {
"size": 10000,
"field": "cave.siteID"
}
}
}
}
}
},
"district": {
"filter": {
"terms": {
"cave.siteID": [
1
]
}
},
"aggs": {
"caveType": {
"filter": {
"terms": {
"cave.caveTypeID": [
4
]
}
},
"aggs": {
"district": {
"terms": {
"size": 10000,
"field": "cave.districtID"
}
}
}
}
}
},
"region": {
"filter": {
"terms": {
"cave.districtID": [
4
]
}
},
"aggs": {
"site": {
"filter": {
"terms": {
"cave.siteID": [
1
]
}
},
"aggs": {
"caveType": {
"filter": {
"terms": {
"cave.caveTypeID": [
4
]
}
},
"aggs": {
"region": {
"terms": {
"size": 10000,
"field": "cave.regionID"
}
}
}
}
}
}
}
}
},
"size": 0
}
如果有人有更“优雅”的方式来做到这一点,请成为我的客人。
推荐阅读
- html - Doxygen @snippet html 样式溢出到下一个标记标签
- wordpress - 我无法在 AWS EC2 上更新 wordpress url 和站点 url
- jquery - 如何修复 Laravel 中的打印页面错误
- python - 如何从二维 Numpy 数组中创建动态饼图?
- java - 如何修复 android.os.NetworkOnMainThread
- ios - 尝试在 iPad 或更小的屏幕上显示时出现自动布局问题
- r - 带有特殊字符的 writeLines 行为
- r - 使用ggplot2根据FIPS代码填写县
- c - 需要帮助解决警告:取消引用类型双关指针会破坏严格的别名规则
- coldfusion - 使用 cfindex 和 cfsearch 在日期范围内建立索引然后搜索