Проблема
Что такое хороший альтернативный запрос, если мне нужны как rescore, так и сортировка?Я знаю, что объединение обоих не поддерживается (запрос rescore не выполняется с версией Elasticsearch 5.4, которую я использую, и в документации говорится, что она вызывает исключение с Elasticsearch 6.x), но я не могу придумать ни одного запроса, которыйподошел бы к ожидаемому поведению.
Пример
Допустим, документы в моем индексе представляют книги с полями title
, description
и genre
.Я хотел бы иметь основной запрос для сопоставления в поле title
, затем повторный запрос для сопоставления в поле description
только для 500 лучших документов и, наконец, сортировку, которая включает оба поля genre
(дляотсортировать результаты на основе пользовательского упорядочения различных значений жанра) и оценки, полученной в результате пересчета.
Сначала я попытался использовать следующий запрос:
{
"query": {
"match": {
"title": "birds"
}
},
"rescore": {
"query": {
"query_weight": 1.0,
"rescore_query": {
"match": {
"description": "colorful"
}
},
"rescore_query_weight": 1.0
},
"window_size": 500
},
"sort": [
{
"_script": {
"order": "asc",
"script": {
"params": {
"Fantasy": 0,
"Thriller": 1,
"Detective": 2
},
"source": "params[doc['genre.keyword'].value]"
},
"type": "number"
}
},
{
"_score": "desc"
}
]
}
Неудовлетворительный обходной путь
Поскольку rescore и sort не совместимы, я в итоге использовал три разных запроса только для rescore, по одному для каждого жанра (Fantasy, Thriller и Detective) и объединяя результаты в ожидаемом порядке.Но у этого решения есть несколько недостатков:
- это занимает больше времени, так как я отправляю несколько запросов в Elasticsearch
- труднее использовать возможности Elasticsearch для разбиения на страницы результатов
- для этого требуется код вне Elasticsearch
В моем случае из реальной жизни я не хочу переносить содержимое запроса rescore в основной запрос и использовать только сортировку, потому что мой основной запрос возвращает многодокументы и запрос на восстановление занимают слишком много времени для подсчета баллов по каждому возвращенному документу ...
Заранее благодарим вас за любые советы о том, как справиться с одновременным восстановлением и сортировкой!