Я пытаюсь создать собственную скриптовую агрегирование в Elasticsearch с использованием языка скриптов по умолчанию Groovy.Elasticearch & Groovy Scripting Вложенное полевое агрегирование Соответствие
Мои данные, установленные в elasticsearch является:
"days_open": [
{
"open": "0800",
"close": "2200",
"dotw": "monday"
}
,
{
"open": "0800",
"close": "2300",
"dotw": "tuesday"
}
,
{
"open": "0800",
"close": "2200",
"dotw": "wednesday"
}
,
{
"open": "0800",
"close": "2300",
"dotw": "thursday"
}
,
{
"open": "0800",
"close": "2300",
"dotw": "friday"
}
,
{
"open": "0800",
"close": "1700",
"dotw": "saturday"
}
]
Я хочу сделать агрегацию «Open Now», который будет отображать все busnesses с этим вложенными данными, как «открыть».
"open_now": {
"filter": {
"script": {
"script": {
"inline": "days_open = _source.days_open; days_open.each {day-> if (day.dotw == 'wednesday' && day.open < 1200 && day.close > 1200) { return true; }}; return false;"
}
}
}
}
Однако я получаю сообщение об ошибке, как это:
"reason": {
"type": "script_exception",
"reason": "failed to run inline script [days_open = _source.days_open; days_open.each {day-> if (day.dotw == 'wednesday' && day.open < 1200 && day.close > 1200) { return true; }}; return false;] using lang [groovy]",
"caused_by": {
"type": "no_class_def_found_error",
"reason": "sun/reflect/MethodAccessorImpl",
"caused_by": {
"type": "class_not_found_exception",
"reason": "sun.reflect.MethodAccessorImpl"
}
}
}
кажется, что days_open
значение переменной заключается в следующем: [{dotw=monday, close=2200, open=0800}, {dotw=tuesday, close=2300, open=0800}, {dotw=wednesday, close=2200, open=0800}, {dotw=thursday, close=2300, open=0800}, {dotw=friday, close=2300, open=0800}, {dotw=saturday, close=1700, open=0800}]
, который я могу получить от _head плагина в Elasticsearch, используя собственные запросы, но я не знаю, как получить отладочную информацию дальше, чем от Groovy в интерфейсе.
Я использую пакет ONGR Elasticsearch https://github.com/ongr-io/ElasticsearchDSL, который, как представляется, имеет ошибку в настоящее время вложенных Aggs (он окружает вещи дважды дублирующими ключами), но установка сырых вложенных aggs на самом деле не дает мне результатов, которые я ищу в любом случае , Я ищу единичные результаты, которые выглядят так:
"open_now": {
"doc_count": 5
},
Что бы перевести «5 бизнеса в настоящее время открыт (из 20)», не ведер. Сценарий казался лучшим вариантом здесь, подскажите мне, если я ошибаюсь, или если я что-то упустил!
В принципе мне нужен сценарий или agg в ElasticsearchDSL, который может дать мне результат, который я ищу. В настоящее время у меня есть другие агги, которые отлично работают на отдельных полях, таких как «has_website», если поле «business.website» истинно, но поскольку для этого требуется небольшая логика определения «открыть сейчас», я не уверен, как идти об этом в порядке, который работает.