2015-01-06 16 views
6

Tôi đang cố gắng tổng hợp các giá trị trong một mảng và cũng lọc các nhóm được trả về bởi một tiền tố. Không chắc chắn nếu điều này là có thể hoặc tôi đang lạm dụng bộ lọc.Tập hợp lọc tìm kiếm ElasticSearch từ trường mảng

3 tài liệu:

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

Mục đích là để có được một số tài liệu có một màu sắc bắt đầu bằng chữ B:

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

Kết quả đó trở lại bao gồm đỏ không may. Rõ ràng là vì các tài liệu có màu đỏ vẫn phù hợp với bộ lọc bởi vì chúng cũng có màu xanh và/hoặc màu đen.

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

Có cách nào để chỉ lọc kết quả nhóm không?

Trả lời

7

Hãy thử điều này, nó sẽ lọc các giá trị các thùng tự được tạo ra cho:

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

Woops, không chắc chắn làm thế nào tôi bị mất rằng trong tài liệu, cảm ơn! – scott

Các vấn đề liên quan