use*_*783 2 elasticsearch elasticsearch-aggregation
我在elasticsearch中有以下一组嵌套子聚合(field2是field1的子聚合,field3是field2的子聚合)。然而事实证明,field3 的术语聚合不会对没有 field3 的文档进行存储桶。
我的理解是,除了 field3 的术语查询之外,我还必须使用 Missing 子聚合查询来对这些查询进行存储。
但我不确定如何将其添加到下面的查询中以将两者都存储起来。
{
"size": 0,
"aggregations": {
"f1": {
"terms": {
"field": "field1",
"size": 0,
"order": {
"_count": "asc"
},
"include": [
"123"
]
},
"aggregations": {
"field2": {
"terms": {
"field": "f2",
"size": 0,
"order": {
"_count": "asc"
},
"include": [
"tr"
]
},
"aggregations": {
"field3": {
"terms": {
"field": "f3",
"order": {
"_count": "asc"
},
"size": 0
},
"aggregations": {
"aggTopHits": {
"top_hits": {
"size": 1
}
}
}
}
}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
在版本 2.1.2 及更高版本中,您可以使用missingtermsaggregation 的参数,它允许您为缺少该字段的文档指定默认值。(仅供参考,该missing参数从 2.0 开始可用,但有一个错误导致它无法在子聚合上工作,这就是您在此处使用它的方式。)
...
"aggregations": {
"field3": {
"terms": {
"field": "f3",
"order": {
"_count": "asc"
},
"size": 0,
"missing": "n/a" <----- provide a default here
},
"aggregations": {
"aggTopHits": {
"top_hits": {
"size": 1
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是,如果您使用的是 2.x 之前的 ES 集群,则可以使用与聚合相同深度的missing聚合field3来存储缺少“f3”的文档,如下所示:
...
"aggregations": {
"field3": {
"terms": {
"field": "f3",
"order": {
"_count": "asc"
},
"size": 0
},
"aggregations": {
"aggTopHits": {
"top_hits": {
"size": 1
}
}
}
},
"missing_field3": {
"missing" : {
"field": "f3"
},
"aggregations": {
"aggTopMissingHit": {
"top_hits": {
"size": 1
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4323 次 |
| 最近记录: |