Скрипты в elasticsearch
У меня есть пара вопросов о скриптах в elasticsearch, надеюсь, кто-нибудь мне поможет. Мне нужно добавить несколько параметров из документа в_score
и отсортируйте по общей стоимости. Сначала я опишу данные, которые у меня есть и которые нужно добавить:
rating
- число от 1 до 9,duration_bucket
это число от 0 до 2,rating_adj
[{text
- текст, если переданный параметр соответствует этому значению, результат будет изменен на следующее значение.adj
- число, на которое будет изменен результат.
}]
- Ну а
score
само по себе обычно это значение находится в диапазоне от 1 до 4.
Изначально у меня была сортировка в таком порядке:
score
rating
duration_bucket
Но это дало несколько иной результат. Поэтому был написан небольшой скрипт, который складывал все эти значения.
def found = null;
if (params.text != null) {
found = params._source['rating_adj'].find(item -> item.text == params.text);
}
def res = _score + params._source['duration_bucket'] + params._source['rating'];
if (found != null) {
return res + found.adj
}
return res;
И первый вопрос. Я пробовал два варианта.
- Через
function score
и уже отсортированы по этому баллу. - Непосредственно через
script sort
Разницы в производительности не заметил, есть ли существенные отличия в этих подходах?
И второй вопрос. При использовании этого скрипта процессор загружается полностью, в отличие от обычной сортировки. Есть ли способы оптимизировать скрипты или все дело в оборудовании?