Проблемы со скорингом

Выполняю поиски по десяти различным массивам. Массивы состоят из слов, словосочетаний (преимущественно русский и английский), а также из придуманных обозначений, например "}{отта6Ь1ч".
Результаты поиска по нескольким индексам должны быть сравнимы по скорингу, поэтому использую формулу ранжирования, не зависящую от индекса:

{
    "custom": {
        "type": "scripted",
        "script": {
            "source": "return Math.sqrt(doc.freq / doc.length) * query.boost;"
        }
    }
}
  1. Меня не очень устраивают результаты ранжирования, пока вижу вот такие варианты получения сопоставимого скоринга при поиске по нескольким индексам:
  • Использовать другую формулу скоринга, не учитывающую статистическую информацию индексов
  • Все данные хранить в одном индексе, добавить поле категории и при поиске фильтровать по категориям (какую тогда лучше формулу использовать?)
    Есть ли еще какие-то варианты, какой будет более точно ранжировать?
  1. Подскажите, как настроить ранжирование при поиске по биграммам.
    Например, ищется "SIBERIKA"
{
    "query": {
        "multi_match": {
            "fields": ["title.bigram"],
            "query": "SIBERIKA"
        }
    }
}

Скоринг получается такой:
"UBER" - скоринг 1.1547005, совпадают 2/3 биграм
"SIBIRICA" - скоринг 1.1338934, совпадает 3/7 биграм
Как более похожее SIBIRICA вывести раньше UBER?

  1. Подскажите, как настроить ранжирование при поиске по нескольким словам.
    По запросу
{
    "query": {
        "multi_match": {
            "fields": ["title"],
            "query": "непоседа сити",
            "fuzziness": "AUTO:4,7",
            "fuzzy_transpositions": false
        }
    }
}

Документы "напоседа" и "сити" идут со скорингом 1, как сделать так, чтобы более длинные слова давали больший вклад в скоринг, чем короткие?

А чем вас dfs_query_then_fetch не устраивает?

Спасибо, dfs_query_then_fetch похоже на то, что надо