【发布时间】:2021-07-01 11:43:49
【问题描述】:
我的索引中的文档如下所示:
{
"foo": null,
"bars": [
{
"baz": "BAZ",
"qux": null,
"bears": [
{
"fruit": "banana"
}
]
}
]
}
我想汇总 .bars[].bears[].fruit 的唯一值以及每个找到值的计数。但是,我也只想计算与foo 上的某些条件匹配的文档的这些深度值,以及与baz 和qux 上的某些条件匹配的bars[] 值。我还想聚合所有文档,忽略搜索查询的内容。
以下查询完成了我想做的所有事情:
{
"aggs": {
"global": {
"global": {},
"aggs": {
"notFoo": {
"filter": {
"bool": {
"must_not": [
{
"exists": {
"field": "foo"
}
}
]
}
},
"aggs": {
"bars": {
"nested": {
"path": "bars"
},
"aggs": {
"notValueN": {
"filter": {
"bool": {
"filter": [
{
"bool": {
"should": [
{
"terms": {
"bars.baz": [
"value1",
"value2",
"value3"
]
}
},
{
"terms": {
"bars.qux": [
"value4",
"value5",
"value6"
]
}
}
],
"minimum_should_match": 1
}
}
]
}
},
"aggs": {
"bears": {
"nested": {
"path": "bars.bears"
},
"aggs": {
"rules": {
"terms": {
"field": "bars.bears.fruit"
}
}
}
}
}
}
}
}
}
}
}
}
}
}
此查询有效,但感觉相当庞大和繁重。为了得到我正在寻找的结果,我必须访问.aggregations.global.bars.notValueN.bears.fruit.buckets。有没有办法展平这个大查询?就目前而言,如果以后需要引入任何其他条件,则此查询非常难以维护。
【问题讨论】:
标签: elasticsearch elasticsearch-aggregation