Я хотел бы создать сегменты на основе вхождений ключевых слов в поле.
Я проверил документацию эластичного поиска и обнаружил, что агрегация фильтров должна хорошо подходить: https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-filters-aggregation.html#search-aggregations-bucket-filters-aggregation
В настоящее время мы 'использовать bodybuilder.js для создания запросов. Я нашел в исходном коде (https://github.com/danpaz/bodybuilder/blob/master/src/aggregation-builder.js#L87) недокументированную функцию:
bodybuilder()
.aggregation('terms', 'title', {
_meta: { color: 'blue' }
}, 'titles')
.build()
, что приводит к:
{
"aggs": {
"titles": {
"terms": {
"field": "title"
},
"meta": {
"color": "blue"
}
}
}
}
Но на самом деле это не та структура, которая описана в ESДокументация:
GET logs/_search
{
"size": 0,
"aggs" : {
"messages" : {
"filters" : {
"filters" : [
{ "match" : { "body" : "error" }},
{ "match" : { "body" : "warning" }}
]
}
}
}
}
Есть идеи, как добиться агрегации фильтров с помощью bodybuilder.js?