Я использую эластичный поиск для обеспечения возможности поиска по каталогу продуктов.Возникло требование иметь возможность вручную сопоставлять набор результатов для данного поискового термина.
Например, естественный результат поиска может дать результат (1), (2), (3), (4).), (5), (6), тогда как товарные результаты могут быть предпочтительными как (6), (4), (5), (1), (2), (3)
В настоящее время мы используемполе 'bestsellerRank' при сортировке, значение которого вычисляется в бизнес-логике перед заполнением индексов эластичного поиска, и поэтому у нас может быть несколько документов с одинаковым значением bestsellerRank.
Я попытался добавитьприведенный ниже скрипт для запроса, который я первоначально нашел здесь
В приведенном ниже примере документ, соответствующий iD "1364352860", будет иметь значение сортировки 6, а непроверенные документы будут иметь значение сортировки, котороесоответствует рангу бестселлера этого документа.
"sort": [{
"_script": {
"type": "number",
"script": {
"lang": "painless",
"source": "if(params.scores.containsKey(doc['iD'].value)) { return params.scores[doc['iD'].value];} return doc['bestsellerRank'].value;",
"params": {
"scores": {
"1364352860": 6
}
}
},
"order": "asc"
}
}]
Этот сценарий работает в принципе, пока не будет документов с порядком сортировки 1 - 5 или пока не будет более 1 документа с порядком сортировки5и т. д. Когда это происходит, мой документ с порядком сортировки 6 больше не находится в позиции 6, но он действительно должен отображаться в позиции 6, даже если у 5 вышеупомянутых документов есть порядки сортировки, начинающиеся выше 6.
SwifType, созданный на основе эластичного поиска и недавно приобретенный ими, имеет функцию «Ранжирование результатов», которая по существу позволяет фиксировать определенные результаты в определенных позициях, поэтому это должна быть функциональность, которая доступна через механизм сценариев эластичного поиска.Однако я нигде не могу найти ссылки на этот тип функциональности.
Кто-нибудь имел опыт попытки зафиксировать или закрепить результаты поиска в указанной позиции?