Короче говоря, нет, невозможно получить реальную нормализованную оценку для запроса, но можно получить достаточно хорошую нормализацию оценки, которая работает во многих случаях.
Проблема с получениемоценка, которая указывает, является ли документ хорошим соответствием или нет для запроса, состоит в том, чтобы найти, какой документ будет лучшим для этого запроса, и, следовательно, максимальную оценку.Используя эластичный поиск и большинство (если не все) метрик, максимальная оценка не ограничена.
Даже с простым запросом на совпадение вы можете технически достичь бесконечной оценки с документом, который повторяет запрошенный термин бесконечное числовремя.Без привязки к баллу невозможно получить истинный нормализованный балл.
Но все надежды не потеряны.Вместо нормализации по наилучшему из возможных баллов вы можете нормализовать по фальшивому идеальному документу, который должен получить максимальный балл.Например, если вы запрашиваете два поля 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) вы можете заметить более низкую оценку для идеального документа по сравнению с ранее проиндексированным документом.