2015-06-17 4 views
2

Моих документов в elasticsearch имеет видаElasticsearch агрегирования регулярного выражения соответствия в списке

{ 
    ... 
    dimensions : list[string] 
    ... 
} 

Я хотел бы найти все размеры по всем документам, которые соответствуют регулярному выражению. Я чувствую, что агрегация, вероятно, сделает трюк, но у меня возникают проблемы с ее формулировкой.

Например, предположим, что у меня есть три документа, как показано ниже:

{ 
    ... 
    dimensions : ["alternative", "alto", "hello"] 
    ... 
} 


{ 
    ... 
    dimensions : ["hello", "altar"] 
    ... 
} 


{ 
    ... 
    dimensions : ["nore", "sore"] 
    ... 
} 

Я хотел бы получить результат ["alternative", "alto", "altar"], когда я запрашивая регулярное выражение "alt.*"

ответ

4

Вы можете добиться того, что с простая настройка terms с параметром include property, который можно использовать для указания регулярного выражения (например, alt.* в вашем случае) или массива значений, которые должны быть включены в ведра. Отметим, что также exclude аналог, при необходимости:

{ 
    "size": 0, 
    "aggs": { 
    "dims": { 
     "terms": { 
     "field": "dimensions", 
     "include": "alt.*" 
     } 
    } 
    } 
} 

Результаты:

{ 
    ... 
    "aggregations" : { 
    "dims" : { 
     "doc_count_error_upper_bound" : 0, 
     "sum_other_doc_count" : 0, 
     "buckets" : [ { 
     "key" : "altar", 
     "doc_count" : 1 
     }, { 
     "key" : "alternative", 
     "doc_count" : 1 
     }, { 
     "key" : "alto", 
     "doc_count" : 1 
     } ] 
    } 
    } 
} 
+0

спасибо! Это потрясающе :) – darksigma

Смежные вопросы