Wie filtere ich eine globale Aggregation von elasticsearch?

10

Was ich erreichen möchte: Ich möchte, dass meine "Alter" -Aggregation nicht vom Abfragefilter gefiltert wird und ich Filter anwenden kann.

Wenn ich also mit dieser Abfrage beginne:

%Vor%

Meine Aggregation "young_age" wird sowohl von filter_1 als auch von filter_2 gefiltert. Ich möchte nicht, dass meine Aggregation nach filter_1 gefiltert wird.

Als ich in die Dokumentation schaute, dachte ich, dass globale Aggregation mein Problem lösen würde, und ich schrieb diese Abfrage:

%Vor%

Aber dann beschwert sich elastische Suche über mein filter_2:

"" " Gefunden zwei Aggregationstypdefinitionen [Alter] in [global] und [filter] "" "

Und natürlich, wenn ich das filter_2 entferne:

%Vor%

Dann wird meine Aggregation nicht wie erwartet durch filter_1 gefiltert.

Also, wie soll ich filter_2 auf meine globale Aggregation anwenden? Oder wie soll ich das erreichen? Ich erinnere mich, mit den Facettenfiltern etwas Ähnliches geschrieben zu haben ...

    
adrienbourgeois 28.07.2015, 08:06
quelle

2 Antworten

2

Meiner Meinung nach ist dies der typische Anwendungsfall eines post_filter . Wie der Arzt sagt:

  

Der post_filter wird auf die Suchtreffer am Ende einer Suchanfrage angewendet, nachdem die Aggregationen bereits berechnet wurden

Ihre Abfrage sieht folgendermaßen aus:

%Vor%

In diesem Fall sind die Suchtreffer alle Dokumente im Index. Dann wird die Aggregation berechnet (vor Filter_1). Und danach wird die post_filter mit dem Filter_1 ausgeführt.

Bearbeiten: Wie Sie in Ihrer Empfehlung sagten, haben Sie viele Aggregationen und nur eine, die nicht von filter_1 betroffen sein sollte Ich habe Ihre Abfrage mit globaler Aggregation

behoben %Vor%     
moliware 28.07.2015, 08:48
quelle
0

Globals und Filter sind nicht auf demselben Level erlaubt. Sie müssen Filter auf einer Ebene innerhalb der globalen Aggregation einfügen.

sollte so etwas für Sie tun.

%Vor%     
Roshan 25.03.2018 18:32
quelle

Tags und Links