Выполняю поиски по десяти различным массивам. Массивы состоят из слов, словосочетаний (преимущественно русский и английский), а также из придуманных обозначений, например "}{отта6Ь1ч".
Результаты поиска по нескольким индексам должны быть сравнимы по скорингу, поэтому использую формулу ранжирования, не зависящую от индекса:
{ "custom": { "type": "scripted", "script": { "source": "return Math.sqrt(doc.freq / doc.length) * query.boost;" } } }
- Меня не очень устраивают результаты ранжирования, пока вижу вот такие варианты получения сопоставимого скоринга при поиске по нескольким индексам:
- Использовать другую формулу скоринга, не учитывающую статистическую информацию индексов
- Все данные хранить в одном индексе, добавить поле категории и при поиске фильтровать по категориям (какую тогда лучше формулу использовать?)
Есть ли еще какие-то варианты, какой будет более точно ранжировать?
- Подскажите, как настроить ранжирование при поиске по биграммам.
Например, ищется "SIBERIKA"
{ "query": { "multi_match": { "fields": ["title.bigram"], "query": "SIBERIKA" } } }
Скоринг получается такой:
"UBER" - скоринг 1.1547005, совпадают 2/3 биграм
"SIBIRICA" - скоринг 1.1338934, совпадает 3/7 биграм
Как более похожее SIBIRICA вывести раньше UBER?
- Подскажите, как настроить ранжирование при поиске по нескольким словам.
По запросу
{ "query": { "multi_match": { "fields": ["title"], "query": "непоседа сити", "fuzziness": "AUTO:4,7", "fuzzy_transpositions": false } } }
Документы "напоседа" и "сити" идут со скорингом 1, как сделать так, чтобы более длинные слова давали больший вклад в скоринг, чем короткие?