Как определить, подходит ли документ для запроса, например, нормализовать счет эластичного поиска? - PullRequest
0 голосов
/ 31 мая 2019

Оценка, рассчитанная Elasticsearch, обеспечивает ранжирование между документами, но не говорит о том, соответствуют ли документы запросу. В настоящее время первый документ может совпадать по всем полям или только по одному. Единственная информация, которую дает оценка, - это то, что она является лучшим соответствием.

Можно ли получить нормализованный балл по запросу? Например, 1 балл - это документ, идеально соответствующий запросу, и 0,1 балла - документ, плохо соответствующий.

1 Ответ

0 голосов
/ 31 мая 2019

Короче говоря, нет, невозможно получить реальную нормализованную оценку для запроса, но можно получить достаточно хорошую нормализацию оценки, которая работает во многих случаях.

Проблема с получениемоценка, которая указывает, является ли документ хорошим соответствием или нет для запроса, состоит в том, чтобы найти, какой документ будет лучшим для этого запроса, и, следовательно, максимальную оценку.Используя эластичный поиск и большинство (если не все) метрик, максимальная оценка не ограничена.

Даже с простым запросом на совпадение вы можете технически достичь бесконечной оценки с документом, который повторяет запрошенный термин бесконечное числовремя.Без привязки к баллу невозможно получить истинный нормализованный балл.

Но все надежды не потеряны.Вместо нормализации по наилучшему из возможных баллов вы можете нормализовать по фальшивому идеальному документу, который должен получить максимальный балл.Например, если вы запрашиваете два поля name и occupation с запрашиваемыми терминами Jane Doe и Cook, ваш идеальный документ может быть

{
    "name": "Jane Doe",
    "occupation": "Cook"
}

Если индекс содержит документ с, например,имя Jane Jane Doe тогда идеальный документ может не набрать максимальный балл.Если запрашиваемые поля относительно короткие, вам, вероятно, не нужно беспокоиться о дублировании терминов.Если у вас есть поля с множеством терминов, вы можете решить дублировать некоторые термины, которые часто встречаются в идеальном документе.Если цель состоит в том, чтобы определить, является ли документ хорошим соответствием или нет, как правило, нет проблем с тем, чтобы документ был оценен выше идеального документа.

Хорошая новость заключается в том, что если вы используете по крайней мереasticsearch 6.4 Вам не нужно индексировать поддельный документ, чтобы получить его оценку по запросу.Вы можете использовать конечную точку _scripts / painless / _execute , чтобы получить оценку идеального документа.

GET _scripts/painless/_execute
{
    "script": {
        "source": "_score"
    },
    "context": "score",
    "context_setup": {
        "index": <INDEX>,
        "document": <THE_IDEAL_DOCUMENT>,
        "query": <YOUR_QUERY>
    }
}

Обратите внимание, что статистика полей поддельного документа, например количество документовсодержащее поле и количество полей, содержащих запрашиваемый термин, будет учитываться при вычислении оценки.Если у вас много документов, это не должно быть проблемой, но для очень редких полей или терминов (скажем, ниже 20) вы можете заметить более низкую оценку для идеального документа по сравнению с ранее проиндексированным документом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...