2015-01-06 19 views
6

Ich versuche, eine Aggregation für Werte in einem Array zu tun und auch die Buckets zu filtern, die von einem Präfix zurückgegeben werden. Ich bin mir nicht sicher, ob dies möglich ist oder ob ich den Filterbehälter missbrauche.ElasticSearch Filtern von Aggregationen aus Array-Feld

3 Dokumente:

{ "colors":["red","black","blue"] } 
{ "colors":["red","black"] } 
{ "colors":["red"] } 

Ziel eine Anzahl von Dokumenten zu bekommen, ist, die eine Farbe mit dem Buchstaben B beginnen haben:

{ 
    "size":0, 
    "aggs" : { 
    "colors" : { 
     "filter" : { "prefix" : { "colors" : "b" } }, 
     "aggs" : { 
     "top-colors" : { "terms" : { "field":"colors" } } 
     } 
    } 
    } 
} 

Die Ergebnisse, die leider wieder schließen Red kommen. Offensichtlich, weil die Dokumente mit Rot immer noch durch Filter übereinstimmen, weil sie auch Blau und/oder Schwarz haben.

"aggregations": { 
"colors": { 
    "doc_count": 2, 
    "top-colors": { 
    "buckets": [ 
     { 
     "key": "black", 
     "doc_count": 2 
     }, 
     { 
     "key": "red", 
     "doc_count": 2 
     }, 
     { 
     "key": "blue", 
     "doc_count": 1 
     } 
    ] 
    } 
} 
} 

Gibt es eine Möglichkeit, nur die Bucket-Ergebnisse zu filtern?

Antwort

7

dies versuchen, wird es die Werte, die die Eimer filtern sich für erstellt werden:

{ 
    "size": 0, 
    "aggs": { 
    "colors": { 
     "filter": { 
     "prefix": { 
      "colors": "b" 
     } 
     }, 
     "aggs": { 
     "top-colors": { 
      "terms": { 
      "field": "colors", 
      "include": { 
       "pattern": "b.*" 
      } 
      } 
     } 
     } 
    } 
    } 
} 
+0

Woops, nicht sicher, wie ich das in der Dokumentation verpasst, danke! – scott

Verwandte Themen