fuzzy
Поиск документов, содержащих термины, схожие с поисковым термином в пределах максимально допустимого расстояния Дамерау-Левенштейна
Нечеткий поиск (Fuzzy query)
Основные понятия
Нечеткий запрос (fuzzy query) ищет документы, содержащие термины, схожие с поисковым термином в пределах максимально допустимого расстояния Дамерау-Левенштейна. Это расстояние измеряет количество односимвольных изменений, необходимых для преобразования одного термина в другой:
- Замены: кот → бот
- Вставки: кот → коты
- Удаления: кот → от
- Транспозиции: кот → кто
Принцип работы
- Запрос генерирует все возможные варианты поискового термина, попадающие в заданное расстояние редактирования
- Количество вариантов ограничивается параметром
max_expansions
- Поиск выполняется по всем сгенерированным вариантам
Примеры запросов
Базовый пример с поиском ошибочного написания “HALET” вместо “HAMLET”:
GET shakespeare/_search
{
"query": {
"fuzzy": {
"speaker": {
"value": "HALET"
}
}
}
}
Примечание: Используется автоматическое определение расстояния (AUTO)
Расширенный пример с настройкой параметров:
GET shakespeare/_search
{
"query": {
"fuzzy": {
"speaker": {
"value": "HALET",
"fuzziness": "2",
"max_expansions": 40,
"prefix_length": 0,
"transpositions": true,
"rewrite": "constant_score"
}
}
}
}
Параметры запроса
Синтаксис запроса:
GET _search
{
"query": {
"fuzzy": {
"<поле>": {
"value": "образец",
...
}
}
}
}
Доступные параметры:
Параметр | Тип данных | Описание |
---|---|---|
value |
Строка | Обязательный. Искомый термин |
boost |
Число с плавающей точкой | Влияет на вес поля при расчете релевантности (>1 - увеличивает, 0-1 - уменьшает). По умолчанию: 1.0 |
fuzziness |
AUTO, 0 или положительное число | Максимальное расстояние редактирования. AUTO - автоматический расчет на основе длины термина |
max_expansions |
Положительное целое | Максимальное количество вариантов термина для поиска. По умолчанию: 50 |
prefix_length |
Неотрицательное целое | Количество начальных символов, не учитываемых при нечетком сравнении. По умолчанию: 0 |
rewrite |
Строка | Стратегия перезаписи запроса. Допустимые значения: constant_score , scoring_boolean и др. По умолчанию: constant_score |
transpositions |
Логическое | Разрешать перестановки соседних символов (ab→ba). По умолчанию: true |
Особенности производительности
- Большие значения
max_expansions
(особенно сprefix_length=0
) могут снизить производительность из-за генерации множества вариантов - При
search.allow_expensive_queries=false
нечеткие запросы не выполняются - Для длинных слов рекомендуется использовать
prefix_length>0
Практические рекомендации
- Для исправления опечаток используйте
fuzziness=1
илиfuzziness=2
- Для профессиональных терминов уменьшайте
max_expansions
- Для ускорения поиска увеличивайте
prefix_length
- Для точных полей отключайте транспозиции (
transpositions=false
)