2016-02-29 4 views
1

У меня большая конфигурация с запросами и фильтрами, которая работает нормально.Elasticsearch: добавление временного поля для результата Groovy

Теперь я добавляю новый фильтр сценария с помощью Groovy, который работает тоже хорошо:

doc['age'].value >= 18; 

Но мне интересно, как сделать следующее с Groovy:

Добавить временное логическое поле в текущий документ. См. Пример ниже.

Пример документ в моем результате:

{ 
    "name": "foo", 
    "age": 20 
} 

Но я хочу, чтобы добавить результат фильтра сценария в моем результате, например, так:

{ 
    "name": "foo", 
    "age": 20, 
    "age_ok": true 
} 

age_ok не индексируется, но установленный фильтром Groovy.

ответ

1

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

Из документации:

{ 
    "query" : { 
     ... 
    }, 
    "script_fields" : { 
     "test1" : { 
      "script" : "doc['my_field_name'].value * 2" 
     }, 
     "test2" : { 
      "script" : { 
       "inline": "doc['my_field_name'].value * factor", 
       "params" : { 
        "factor" : 2.0 
       } 
      } 
     } 
    } 
} 

См https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-script-fields.html

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