2015-01-06 9 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