2015-01-06 38 views
6

我正在嘗試對數組中的值進行聚合,並篩選由前綴返回的存儲區。不知道這是可能的還是我濫用過濾器桶。ElasticSearch從數組字段中過濾聚合

3個文件:

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

的目標是獲得具有彩色文檔開頭字母B計數:

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

也說回來包括紅不幸的結果。很明顯,因爲紅色的文檔仍然通過過濾器匹配,因爲它們也有藍色和/或黑色。

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

有沒有一種方法可以過濾桶結果?

回答

7

試試這個,它會過濾值本身創造了吊桶:

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

Woops,不知道我怎麼錯過了在該文檔中,謝謝! – scott