gpt4 book ai didi

elasticsearch - 如何在Elastic Search的过滤器聚合中引用多个嵌套级别?

转载 作者:行者123 更新时间:2023-12-03 01:34:07 24 4
gpt4 key购买 nike

让我们将其称为根级别foo和子级别events。我想在events级别上进行汇总,但要使用一个过滤器,使event的颜色为“橙色”,或者父foo的customerId为“35”。

因此,我想在嵌套聚合中包含一个过滤器聚合。在此过滤器的查询子句中,我有一个 child 引用了foo上的一个字段,另一个引用了events上的一个字段。但是,第一个 child 无法真正引用这样的 parent !我不能使用reverse_nested聚合,因为我不能将其中之一作为复合查询的子级,并且不能在嵌套之前进行过滤,因为那样会丢失OR语义。如何引用foo上的字段?

具体示例是否有帮助。对应:

{
"foo": {
"properties": {
"customer_id": { "type": "long" },
"events": {
"type": "nested",
"properties": {
"color": { "type": "keyword" },
"coord_y": { "type": "double" }
}
}
}
}
}

(为了清楚起见,进行了更新:这是一个名为 foo的索引,其根映射为 foo)

我希望能够进行的查询:
{
"aggs": {
"OP0_nest": {
"nested": { "path": "events" },
"aggs": {
"OP0_custom_filter": {
"filter": {
"bool": {
"should": [
{ "term": { "events.color": "orange" } },
{ "term": { "customer_id": 35 } }
]
}
},
"aggs": {
"OP0_op": {
"avg": { "field": "events.coord_y" }
}
}
}
}
}
}
}

当然,这是行不通的,因为包含 shouldcustomer_id子句的子项不起作用。该术语查询始终为假,因为无法在嵌套聚合内部访问 customer_id

提前致谢!

最佳答案

由于要在其上应用过滤器的字段位于不同的级别,因此您需要分别对每个级别进行查询,并将它们放在should查询的bool子句中,该子句成为我们过滤器聚合的filter。然后,在此聚合中,我们添加一个嵌套聚合,以获取coord_y的平均值。

聚合将是( UPDATED :由于foo是从字段名称中删除的索引名foo):

{
"aggs": {
"OP0_custom_filter": {
"filter": {
"bool": {
"should": [
{
"term": {
"customer_id": 35
}
},
{
"nested": {
"path": "events",
"query": {
"term": {
"events.color": "orange"
}
}
}
}
]
}
},
"aggs": {
"OP0_op": {
"nested": {
"path": "events"
},
"aggs": {
"OP0_op_avg": {
"avg": {
"field": "events.coord_y"
}
}
}
}
}
}
}
}

关于elasticsearch - 如何在Elastic Search的过滤器聚合中引用多个嵌套级别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53770652/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com