Запросы на уровне термина в Elasticsearch: fuzzy запрос

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

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

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

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

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

Простой запрос

GET /_search
{
  "query": {
    "fuzzy": {
      "user.id": {
        "value": "act"
      }
    }
  }
}

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

GET /_search
{
  "query": {
    "fuzzy": {
      "user.id": {
        "value": "act",
        "fuzziness": "AUTO",
        "max_expansions": 50,
        "prefix_length": 0,
        "transpositions": true,
        "rewrite": "constant_score"
      }
    }
  }
}

Параметры верхнего уровня для fuzzy запросов

field

(Обязательный, объект) Поле для поиска.

Параметры для field

value

(Обязательный, строка) Термин, который вы хотите найти в указанном field.

fuzziness

(Необязательный, строка) Максимальное расстояние редактирования, разрешенное для сопоставления.

max_expansions

(Необязательный, целое число) Максимальное количество созданных вариантов. По умолчанию 50.

Избегайте использования высокого значения в параметре max_expansions, особенно если значение параметра prefix_length равно 0. Высокие значения в параметре max_expansions могут привести к снижению производительности из-за большого количества проверенных вариантов.

prefix_length

(Необязательный, целое число) Количество начальных символов, оставшихся без изменений при создании расширений. По умолчанию 0.

transpositions

(Необязательный, логическое значение) Указывает, включают ли изменения транспонирование двух соседних символов (ab → ba). По умолчанию true.

rewrite

(Необязательный, строка) Метод, используемый для перезаписи запроса.

Fuzzy запросы не будут выполняться, если для search.allow_expensive_queries установлено значение false.


Читайте также:

Комментарии

Популярные сообщения из этого блога

Язык поисковых запросов в Graylog

Нормальные формы, пример нормализации в базе данных

Хэш-таблица: разрешение коллизий