2015-01-06 26 views
6

Dizideki değerler üzerinde bir toplama yapmaya çalışıyorum ve ayrıca bir önek tarafından döndürülen kovaları filtreleyeceğim. Bunun mümkün olup olmadığından emin değilim veya filtre kabını yanlış kullanıyorum.ElasticSearch Dizi alanından toplama toplamaları

3 belgeler:

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

gol B harfiyle başlayan bir renge sahip belgelerin sayısını elde etmektir: geri gelmek maalesef kırmızısı

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

sonuçlanır. Açıkçası kırmızı olan belgeler hala mavi ve/veya siyah olduğu için filtre ile eşleştiği için.

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

Sadece kepçe sonuçlarını filtrelemenin bir yolu var mı?

cevap

7

bu deneyin, onun için değerlerin kendisi oluşturulan kova filtreler:

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

Woops, cevapsız nasıl emin değilim docs, teşekkürler! – scott