Как уже упоминалось в комментарии, это не то, как fuzzy
-запрос работает в Elasticsearch. По умолчанию результаты поиска сортируются по убыванию оценки, где оценка показывает, насколько хорошо документ соответствует определенному запросу. Аспект нечеткости учитывается при расчете этой оценки: чем точнее / менее нечетко соответствует запрос, тем выше оценка. В этом можно убедиться, запросив подробное объяснение оценки (в Elasticsearch v7.x аспект нечеткости включен в расчет коэффициента усиления). Посмотрите на следующий пример:
1. Индексирование двух образцов документов (один с собственным именем, другой с ошибочным именем)
POST fuzzy/_bulk
{"index":{"_id":1}}
{"name": "Shahid"}
{"index":{"_id":2}}
{"name": "Shahib"}
2. Поиск с помощью fuzzy
-запроса имени "Шахид"
GET fuzzy/_search
{
"explain": true,
"query": {
"fuzzy": {
"name": {
"value": "Shahid"
}
}
}
}
3. Пункт оценки и объяснения для обоих соответствующих документов
Для правильно написанного документа («Шахид»):
"_explanation" : {
"value" : 0.57762265,
"description" : "sum of:",
"details" : [
{
"value" : 0.57762265,
"description" : "weight(name:shahid in 0) [PerFieldSimilarity], result of:",
"details" : [
{
"value" : 0.57762265,
"description" : "score(freq=1.0), product of:",
"details" : [
{
"value" : 1.8333334,
"description" : "boost",
"details" : [ ]
},
{
"value" : 0.6931472,
"description" : "idf, computed as log(1 + (N - n + 0.5) / (n + 0.5)) from:",
"details" : [
{
"value" : 1,
"description" : "n, number of documents containing term",
"details" : [ ]
},
{
"value" : 2,
"description" : "N, total number of documents with field",
"details" : [ ]
}
]
},
{
"value" : 0.45454544,
"description" : "tf, computed as freq / (freq + k1 * (1 - b + b * dl / avgdl)) from:",
"details" : [
{
"value" : 1.0,
"description" : "freq, occurrences of term within document",
"details" : [ ]
},
{
"value" : 1.2,
"description" : "k1, term saturation parameter",
"details" : [ ]
},
{
"value" : 0.75,
"description" : "b, length normalization parameter",
"details" : [ ]
},
{
"value" : 1.0,
"description" : "dl, length of field",
"details" : [ ]
},
{
"value" : 1.0,
"description" : "avgdl, average length of field",
"details" : [ ]
}
]
}
]
}
]
}
]
}
Для неправильно написанного документа («Шахиб»):
"_explanation" : {
"value" : 0.46209806,
"description" : "sum of:",
"details" : [
{
"value" : 0.46209806,
"description" : "weight(name:shahib in 1) [PerFieldSimilarity], result of:",
"details" : [
{
"value" : 0.46209806,
"description" : "score(freq=1.0), product of:",
"details" : [
{
"value" : 1.4666666,
"description" : "boost",
"details" : [ ]
},
{
"value" : 0.6931472,
"description" : "idf, computed as log(1 + (N - n + 0.5) / (n + 0.5)) from:",
"details" : [
{
"value" : 1,
"description" : "n, number of documents containing term",
"details" : [ ]
},
{
"value" : 2,
"description" : "N, total number of documents with field",
"details" : [ ]
}
]
},
{
"value" : 0.45454544,
"description" : "tf, computed as freq / (freq + k1 * (1 - b + b * dl / avgdl)) from:",
"details" : [
{
"value" : 1.0,
"description" : "freq, occurrences of term within document",
"details" : [ ]
},
{
"value" : 1.2,
"description" : "k1, term saturation parameter",
"details" : [ ]
},
{
"value" : 0.75,
"description" : "b, length normalization parameter",
"details" : [ ]
},
{
"value" : 1.0,
"description" : "dl, length of field",
"details" : [ ]
},
{
"value" : 1.0,
"description" : "avgdl, average length of field",
"details" : [ ]
}
]
}
]
}
]
}
]
}
4. Заключение К сожалению, нет подробного объяснения буст-фактора (проблема Elasticsearch), но из примера видно, что это единственное отличие в отношении оценки двух документов:
- Shahid: _score: 0.57762265 / boost: 1.8333334
- Shahib: _score: 0.46209806 / boost: 1.4666666