2016-07-12 6 views
0

Ich bin interessiert an Unteraggregationen, aber für bestimmte Keyword-Werte.Mehrere Filteraggregationen im Vergleich zu allen Buckets

"aggregations" : { 
     "Keyword" : { 
      "terms" : { 
      "field" : "keyword" 
      }, 
     "aggregations" : { 
      "Concept" : { 
      "terms" : { 
      "field" : "concept" 
      } 
     } 

Die folgenden Code gibt nur die Top-10 ersten, das die Werte nicht erforderlich macht enthält ich in interessant bin

ich zwei Wege zur Lösung meines Problems sehen.

  • Rückkehr alle Buckets und dann diejenigen auswählen, die ich interessant bin.
  • Hinzufügen von Filteraggregationen für alle Werte, die ich interessiere. Also wenn ich in 10 Schlüsselwort/Werte interessant bin, werde ich 10 Filteraggregationen durchführen.

Was ist die beste Lösung in Bezug auf die Leistung?

+0

Ich verstehe die Anforderung nicht. Vielleicht ein Beispiel geben? –

Antwort

0

Also wenn ich in 10 Schlüsselwort/Werte interessant bin, werde ich 10 Filteraggregationen durchführen.

Dies ist nicht unbedingt wahr.

Sie können einen einzelnen Filter erstellen, unerwünschte Keywords beseitigt und Sie können an dem Abfrageschritt dieses im Voraus tun:

{ 
    "size" : 0, 
    "query" : { 
    "bool" : { 
     "filter" : [ 
     { 
      "terms" : { 
      "keyword" : [ "abc", "def", "ghi" ] 
      } 
     } 
     ] 
    } 
    }, 
    "aggs" : { 
    "Keyword" : { 
     "terms" : { 
     "field" : "keyword" 
     }, 
     "aggs" : { 
     "Concept" : { 
      "terms" : { 
      "field" : "concept" 
      } 
     } 
     } 
    } 
    } 
} 

Der Abfrageschritt es nur abc nach unten filtern würde, def und ghi. Dann würde die Aggregation wie erwartet funktionieren, aber nur für Dokumente mit diesen Werten.