Из документации Elasticsearch относительно нечеткости:
AUTO
Генерирует расстояние редактирования на основе длины термина. Опционально могут быть предоставлены аргументы для низкого и высокого расстояния AUTO: [low], [high]. Если не указано, значения по умолчанию 3 и 6, что эквивалентно AUTO: 3,6, что для длины:
0..2
Должен точно соответствовать
3..5
Разрешено одно редактирование
> 5
Допускается два редактирования
Однако, когда я пытаюсь указать аргументы для низкого и большого расстояния в поисковом запросе, результат не соответствует ожиданиям.
Я использую Elasticsearch 6.6.0 со следующим отображением индекса:
{
"fuzzy_test": {
"mappings": {
"_doc": {
"properties": {
"description": {
"type": "text"
},
"id": {
"type": "keyword"
}
}
}
}
}
}
Вставка простого документа:
{
"id": "1",
"description": "hello world"
}
И следующий поисковый запрос:
{
"size": 10,
"timeout": "30s",
"query": {
"match": {
"description": {
"query": "helqo",
"fuzziness": "AUTO:7,10"
}
}
}
}
Я предполагал, что fuzziness: AUTO: 7,10 будет означать, что для входного члена с длиной <= 6 будут возвращены только документы с точным соответствием. Тем не менее, вот результат моего запроса: </p>
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 0.23014566,
"hits": [
{
"_index": "fuzzy_test",
"_type": "_doc",
"_id": "OQtUu2oBABnEwrgM3Ejr",
"_score": 0.23014566,
"_source": {
"id": "1",
"description": "hello world"
}
}
]
}
}