У меня есть запрос ES, который возвращает около 26 результатов.Гистограмма агрегации elasticsearch по дате больше не работает со сценарием
Запрос имеет агрегации гистограммы элемент, который выглядит следующим образом:
"aggregations" : {
"by_date" : {
"date_histogram" : {
"field" : "startDate",
"interval" : "month"
}
}
}
агрегация элемент результата поиска выглядит следующим образом:
"aggregations": {
"date_histogram": {
"buckets":[
{"key_as_string":"2016-01-01T00:00:00.000Z", "key":1451606400000, "doc_count":18},
{"key_as_string":"2016-02-01T00:00:00.000Z", "key":1454284800000, "doc_count":8}
]
}
}
До сих пор так хорошо. Но я хочу сделать некоторые скрипты против результатов поиска, чтобы удалить элементы, не соответствующие определенным критериям. Поэтому я добавил это к запросу:
"aggregations" : {
"by_date" : {
"date_histogram" : {
"field" : "startDate",
"interval" : "month",
"script" : {
"inline" : "if (condition) {return 1} else {return 0}"
}
}
}
К сожалению, это приводит к результату одного ведра и агрегация теряется:
"date_histogram": {
"buckets": [
{"key_as_string": "1970-01-01T00:00:00.000Z", "key": 0, "doc_count": 26 }
]
}
Что я пробовал:
- уменьшая сценарий
inline
элемент толькоreturn 1
. Это все еще приводит к разрыву агрегации - возвращениедата самого поля даты. Результаты
ClassCastException
- результатом должно быть число - проверка настроек конфигурации ES. Я включил все для
script.engine.groovy.{file|indexed|inline}.{aggs|mapping|search|update|plugin}
, такжеscript.inline
,script.indexed
иscript.aggs
. - Проверен 2.0 breaking aggregation changes, но ничего похожего не было.
Я знаю, что могу запускать отдельные запросы, имеющие этот фильтр в самом запросе (а не в части агрегации), что позволило бы сделать агрегацию без скрипта. Дело в том, что у меня есть дюжина различных агрегатов, которые берут один и тот же набор результатов поиска и выполняют различные типы фильтрации (и агрегации). Выполнение одного и того же запроса несколько раз встречно и неприемлемо.
Насколько я знаю, этот использовал для работы в версии 1.4.4, но больше не работает в версии 2.2.0.
Это ошибка? Или, может быть, одна и та же логика может быть переопределена по-разному, например. через агрегирование скриптов Bucket или любой другой?