Spec-Zone.ru › Elasticsearch 8
›Elasticsearch Guide [8.17] ›Query DSL ›Запросы на уровне терминов

Запрос Fuzzy

Возвращает документы, содержащие термины, похожие на поисковый термин, по показателю расстояния Левенштейна.

Расстояние Левенштейна — это количество односимвольных изменений, необходимых для преобразования одного термина в другой. Эти изменения могут включать:

  • Изменение символа (box → fox)
  • Удаление символа (black → lack)
  • Вставка символа (sic → sick)
  • Перестановка двух смежных символов (act → cat)

Для поиска похожих терминов запрос fuzzy создаёт набор всех возможных вариаций, или расширений, поискового термина в пределах заданного расстояния Левенштейна. Затем запрос возвращает точные совпадения для каждого расширения.

Примеры запросов

Простой пример

resp = client.search(
    query={
        "fuzzy": {
            "user.id": {
                "value": "ki"
            }
        }
    },
)
print(resp)
response = client.search(
  body: {
    query: {
      fuzzy: {
        'user.id' => {
          value: 'ki'
        }
      }
    }
  }
)
puts response
const response = await client.search({
  query: {
    fuzzy: {
      "user.id": {
        value: "ki",
      },
    },
  },
});
console.log(response);
GET /_search
{
  "query": {
    "fuzzy": {
      "user.id": {
        "value": "ki"
      }
    }
  }
}

Пример использования расширенных параметров

resp = client.search(
    query={
        "fuzzy": {
            "user.id": {
                "value": "ki",
                "fuzziness": "AUTO",
                "max_expansions": 50,
                "prefix_length": 0,
                "transpositions": True,
                "rewrite": "constant_score_blended"
            }
        }
    },
)
print(resp)
response = client.search(
  body: {
    query: {
      fuzzy: {
        'user.id' => {
          value: 'ki',
          fuzziness: 'AUTO',
          max_expansions: 50,
          prefix_length: 0,
          transpositions: true,
          rewrite: 'constant_score_blended'
        }
      }
    }
  }
)
puts response
const response = await client.search({
  query: {
    fuzzy: {
      "user.id": {
        value: "ki",
        fuzziness: "AUTO",
        max_expansions: 50,
        prefix_length: 0,
        transpositions: true,
        rewrite: "constant_score_blended",
      },
    },
  },
});
console.log(response);
GET /_search
{
  "query": {
    "fuzzy": {
      "user.id": {
        "value": "ki",
        "fuzziness": "AUTO",
        "max_expansions": 50,
        "prefix_length": 0,
        "transpositions": true,
        "rewrite": "constant_score_blended"
      }
    }
  }
}

Основные параметры для 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/8.17/query-dsl-fuzzy-query.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API