Elasticsearch — значение поиска для оценки запроса

Я использую elasticsearch с пользовательским скриптом. Мне нужно создать пользовательскую оценку на основе других значений, определенных в другом индексе. Назовем это значение «рейтинг». Оценка должна выглядеть так:

Math.log(_score * 2) + doc['ranking'].value

Ранжирование зависит от поля поставщика в оцениваемом типе. Моя проблема в том, что, поскольку ранжирование находится в другом индексе, оно не извлекает значение. Как лучше вести такой счет? Кроме того, как это можно сделать, чтобы он мог кэшировать результаты. Например, есть ли в mvel возможность получить значение на основе пары ключ-значение redis.


person user2694306    schedule 12.10.2014    source источник


Ответы (1)


  1. Вы должны забыть о mvel :)
  2. Вы должны использовать сценарии Groovy

Вы можете проверить эту ссылку на технику кэширования https://github.com/imotov/elasticsearch-native-script-example/blob/master/src/main/java/org/elasticsearch/examples/nativescript/script/LookupScript.java, но это встроенный плагин Java. Хотя это может быть переведено в экземпляр скрипта groovy.

Другой способ (но это зависит от ваших отношений индексов, например, для родителя/потомка), вы можете использовать запрос has_child и использовать поле score в качестве блока передачи между индексами, но это слишком ограничено.

person Alex    schedule 13.10.2014