Запрос fuzzy
Возвращает документы, содержащие термины, похожие на поисковый термин, исходя из расстояния Левенштейна.
Расстояние Левенштейна — это количество односимвольных изменений, необходимых для преобразования одного термина в другой. Эти изменения могут включать:
- Замену символа (box → fox)
- Удаление символа (black → lack)
- Вставку символа (sic → sick)
- Перестановку двух смежных символов (act → cat)
Для поиска похожих терминов запрос fuzzy создаёт набор всех возможных вариаций, или расширений, поискового термина в пределах заданного расстояния Левенштейна. Затем запрос возвращает точные совпадения для каждого расширения.
Примеры запросов
Простой пример
GET /_search
{
"query": {
"fuzzy": {
"user.id": {
"value": "ki"
}
}
}
} Пример с расширенными параметрами
GET /_search
{
"query": {
"fuzzy": {
"user.id": {
"value": "ki",
"fuzziness": "AUTO",
"max_expansions": 50,
"prefix_length": 0,
"transpositions": true,
"rewrite": "constant_score"
}
}
}
} Параметры верхнего уровня для fuzzy
-
<field> - (Обязательный, объект) Поле, которое вы хотите искать.
Параметры для <field>
-
value - (Обязательный, строка) Термин, который вы хотите найти в предоставленном
<field>. -
fuzziness - (Необязательный, строка) Максимальное расстояние Левенштейна, разрешенное для совпадения. Смотрите Fuzziness для допустимых значений и дополнительной информации.
-
max_expansions -
(Необязательный, целое число) Максимальное количество создаваемых вариаций. По умолчанию
50.Избегайте использования больших значений в параметре
max_expansions, особенно если значение параметраprefix_lengthравно0. Большие значения в параметреmax_expansionsмогут привести к низкой производительности из-за большого количества анализируемых вариаций. -
prefix_length - (Необязательный, целое число) Количество символов в начале, которые остаются неизменными при создании расширений. По умолчанию
0. -
transpositions - (Необязательный, булево значение) Указывает, включают ли правки перестановки двух смежных символов (ab → ba). По умолчанию
true. -
rewrite - (Необязательный, строка) Метод, используемый для переписывания запроса. Для допустимых значений и дополнительной информации, см. параметр
rewrite.
Примечания
Запросы fuzzy не будут выполняться, если search.allow_expensive_queries установлено в значение false.
© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/7.17/query-dsl-fuzzy-query.html