Как упоминалось в комментарии, 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), но из примера видно, что это единственная разница в отношении оценки двух документов:
- Шахид: _score: 0,57762265 / повышение: 1,8333334
- Шахиб: _score: 0,46209806 / повышение: 1,4666666
person
Daniel Schneiter
schedule
13.10.2019