У меня есть три индекса продуктов питания "итальянский", "испанский", "американский". Когда пользователь ищет "Сыр", документы с "итальянского" появляются, как наверху. Можно ли "повысить" результаты, если бы я отдавал предпочтение сказать "испанский"? (Я все равно должен получить результаты для итальянского языка, но на основе некоторого числового значения boost для индекса типа "Spanish", упорядочение документов, возвращенных в результатах, отдает предпочтение индексу "Spanish". Возможно ли это при вводе пользователя lucene и/или ES-запрос? Если да, то как?
Как увеличить поиск по типу индекса в elasticsearch или lucene?
Ответ 1
Добавьте запрос термина с усилением для поля _type
или _index
(или обоих).
Ответ 2
Используйте скрипт_score как часть запроса функции:
function_score: {
script_score: {
script: "doc['_type'].value == '<your _type>' ? _score * <boost_factor> : _score"
}
}
Ответ 3
Если вы запрашиваете сразу несколько индексов, можно указать увеличение индексов на верхнем уровне объекта, переданного в Search API:
curl -XGET localhost:9200/italian,spanish,american/_search -d '
{
"query":{"term":{"food_type":"cheese"}},
"indices_boost" : {
"ilalian" : 1.4,
"spanish" : 1.3,
"american" : 1.1
}
}'
Ответ 4
Для повышения времени запроса запросы (например, строка запроса) обычно имеют атрибут boost
, который вы можете установить. Кроме того, вы можете обернуть запросы в настраиваемом коэффициенте повышения. Я бы предпочел бы, как правило, первый.