Скрипты в elasticsearch

У меня есть пара вопросов о скриптах в elasticsearch, надеюсь, кто-нибудь мне поможет. Мне нужно добавить несколько параметров из документа в_scoreи отсортируйте по общей стоимости. Сначала я опишу данные, которые у меня есть и которые нужно добавить:

  • rating - число от 1 до 9,
  • duration_bucket это число от 0 до 2,
  • rating_adj [{
    • text - текст, если переданный параметр соответствует этому значению, результат будет изменен на следующее значение.

    • adj - число, на которое будет изменен результат.

}]

  • Ну а score само по себе обычно это значение находится в диапазоне от 1 до 4.

Изначально у меня была сортировка в таком порядке:

  1. score
  2. rating
  3. 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;

И первый вопрос. Я пробовал два варианта.

  1. Через function score и уже отсортированы по этому баллу.
  2. Непосредственно через script sortРазницы в производительности не заметил, есть ли существенные отличия в этих подходах?

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

0 ответов

Другие вопросы по тегам