Скрипты Elasticsearch 2.1| Нет такого свойства: doc

Я столкнулся с проблемой при попытке выполнить скрипт в запросе ES JSON.

Запрос:

POST _search
{
   "query": {
      "bool": {
         "must": [
            {
               "match_all": {}
            }
         ]
      }
   },
   "aggs": {
      "bucket_histogram": {
         "histogram": {
            "field": "dayTime",
            "interval": 10
         },
         "aggs": {
            "get_average": {
               "avg": {
                  "field": "value"
               }
            },
            "check-threshold": {
               "bucket_script": {
                  "buckets_path": {
                     "averageValue": "get_average"
                  },
                  "script": "averageValue - doc[\"thresholdValue\"].value"
               }
            }
         }
      }
   }
}

Но я получаю эту ошибку вместо возврата значений

    {
   "error": {
      "root_cause": [],
      "type": "reduce_search_phase_exception",
      "reason": "[reduce] ",
      "phase": "fetch",
      "grouped": true,
      "failed_shards": [],
      "caused_by": {
         "type": "groovy_script_execution_exception",
         "reason": "failed to run inline script [averageValue - doc[\"thresholdValue\"].value] using lang [groovy]",
         "caused_by": {
            "type": "missing_property_exception",
            "reason": "No such property: doc for class: 7dcca7d142ac809a7192625d43d95bde9883c434"
         }
      }
   },
   "status": 503
}

Но если я удаляю doc[\"thresholdValue\"] и ввожу число, все работает нормально.


person Amr Youssry    schedule 06.01.2016    source источник


Ответы (1)


Вы используете bucket_script, который является частью конвейерные агрегации, выпущенные вместе с Elasticsearch 2.0. Конвейерные агрегаты работают с другими агрегатами, а не с документами, поэтому контекст doc не передается агрегату.

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

person pickypg    schedule 06.01.2016
comment
Большое спасибо за ответ. Я надеялся реализовать это в java, но не могу найти никакой документации по java-api для сценариев ведра. У вас случайно нет полезных ссылок? - person Amr Youssry; 10.01.2016
comment
Вот документация по Java API для агрегатов. Он не показывает конвейеры, но структура такая же. - person pickypg; 11.01.2016