我想實現的目標:我希望我的「年齡」聚合不會被查詢過濾器過濾,我希望能夠對其應用過濾器。如何過濾elasticsearch全局聚合?
所以,如果我開始與此查詢:
{
"query":{
"filtered":{
"filter":{ "terms":{ "family_name":"Brown" } } //filter_1
}
},
"aggs":{
"young_age":{
"filter":{
"range":{ "lt":40, "gt":18 } //filter_2
},
"aggs":{
"age":{
"terms":{
"field":"age"
}
}
}
}
}
}
我的聚集 「young_age」 將由兩個FILTER_1和filter_2進行過濾。我不希望我的聚合被filter_1過濾。
當我正在尋找到的文件,我想全球的聚集會解決我的問題,我寫了查詢:
{
"query":{
"filtered":{
"filter":{ "terms":{ "family_name":"Brown" } } //filter_1
}
},
"aggs":{
"young_age":{
"global":{}, //<----------- add global
"filter":{
"range":{ "lt":40, "gt":18 } //filter_2
},
"aggs":{
"age":{
"terms":{
"field":"age"
}
}
}
}
}
}
但隨後彈性搜索抱怨我filter_2:
「」」 發現了兩個聚集類型定義在[年齡] [全球]和[過濾器] 「」」
當然如果我刪除filter_2:
{
"query":{
"filtered":{
"filter":{
"terms":{
"family_name":"Brown"
}
}
}
},
"aggs":{
"young_age":{
"global":{},
"aggs":{
"age":{
"terms":{
"field":"age"
}
}
}
}
}
}
然後我的聚合不會被filter_1過濾(如預期的那樣)。
那麼我想如何將filter_2應用於我的全局聚合?或者我該如何實現這一目標?我記得寫了一些類似的方面過濾器...
這樣做是可以固定的查詢,但實際上我有一個多聚合,並且只有其中一個不應該被filter_1過濾。所以用你的解決方案,這意味着我將不得不復制post_filter這些聚合,我覺得有點討厭(也可能不是從性能角度來看這麼好?) – adrienbourgeois
@adrienbourgeois我使用全局聚合修復了查詢,讓我知道它是否適合你:) – moliware
感謝隊友它的工作就像一個魅力!我已經接受你的答案。歡呼聲 – adrienbourgeois