Оглавление курса
Query DSL · 13 / 28

Частичные совпадения и синтаксис

Выберем управляемую стратегию для префиксов, опечаток и расширенного пользовательского ввода.

Разделов: 5Elasticsearch 9.4.3Ещё не прочитан

Чему вы научитесь

  • Префиксы и шаблоны
  • Опечатки и расширения
  • Безопасный пользовательский язык

Выберем управляемую стратегию для префиксов, опечаток и расширенного пользовательского ввода.

Примеры course-products используют учебную схему и товар из главы 5 «Mapping и типы полей». Разборы упражнений ниже используют отдельный публичный набор тренажёра.

Логика главы
  • Префиксы и шаблоны
  • Опечатки и расширения
  • Безопасный пользовательский язык

Выберем управляемую стратегию для префиксов, опечаток и расширенного пользовательского ввода.

Курс ориентирован на Elasticsearch 9.4.3. Разборы упражнений используют публичный набор products; остальные запросы показывают отдельные учебные индексы и могут требовать подготовки или прав, недоступных в тренажёре. Ответы сокращены, score может меняться. Для расширенных функций проверяйте лицензию и вариант развёртывания.

01 / 05

Префиксы и шаблоны

prefix ищет начало терма. wildcard задаёт шаблон с * и ?, regexp — регулярное выражение над термами словаря, а не произвольный обход исходных строк. Ведущий wildcard может заставлять просматривать много термов. Ограничения длины и сложности пользовательского ввода важнее попыток компенсировать тяжёлый шаблон дополнительными серверами.

Самопроверка
02 / 05

Опечатки и расширения

Fuzzy matching расширяет терм по расстоянию редактирования. Важны fuzziness, prefix_length и max_expansions: они влияют на полноту и стоимость. Это не семантический поиск и не автоматическая транслитерация. Для коротких артикулов нечёткость может возвращать другой товар. match_phrase_prefix и match_bool_prefix полезны при вводе последнего незавершённого слова, но имеют разные правила для предыдущих слов.

Самопроверка
03 / 05

Безопасный пользовательский язык

query_string поддерживает выразительный синтаксис, но ошибки разбора могут отклонить запрос. simple_query_string терпимее к ошибкам и позволяет ограничить операторы. Оба требуют осознанной политики полей, экранирования и сложности. Не передавайте произвольный DSL из публичной формы в кластер: сервер задаёт допустимые поля, фильтры доступа и ресурсные ограничения.

Нечёткий поиск ограничивает расширения; качество проверяют на реальных опечатках.

POST /course-products/_search
{
  "query": {
    "match": {
      "name": {
        "query": "headphnes",
        "fuzziness": "AUTO",
        "prefix_length": 1,
        "max_expansions": 20
      }
    }
  }
}

Как читать результат

Нечёткий поиск ограничивает расширения; качество проверяют на реальных опечатках.

Самопроверка
04 / 05

Разбор на примере каталога

Опечатка "headphnes" похожа на headphones по написанию, а запрос «для пробежки» выражает потребность, которой в слове headphones нет. Fuzzy может помочь первому случаю, но не обязан помогать второму. Prefix подходит незавершённому началу терма, а wildcard по внутреннему фрагменту имеет другую стоимость. Не объединяйте все способы через should без измерений: число кандидатов и задержка могут резко вырасти, а точный результат потеряется среди слабых совпадений.

Самопроверка

Самопроверка

Сначала ответьте самостоятельно, затем раскройте объяснение.

1. Где работает regexp?

По индексированным термам поля.

2. Почему *phone может быть дорогим?

Ведущий wildcard расширяет область перебора словаря.

3. Fuzzy исправляет смысл?

Нет, оно работает с расстоянием между написаниями.

4. Что выбрать для простого пользовательского синтаксиса?

Часто simple_query_string с ограниченными операторами и полями.

5. Где ограничивать DSL?

На серверной границе до обращения к Elasticsearch.

Краткая памятка

  • По индексированным термам поля.
  • Ведущий wildcard расширяет область перебора словаря.
  • Нет, оно работает с расстоянием между написаниями.
  • Часто simple_query_string с ограниченными операторами и полями.
  • На серверной границе до обращения к Elasticsearch.

Официальная документация

Готовы применить знания?

Подтвердите прочтение, чтобы сохранить своё место. Чтение и решение заданий учитываются отдельно в этом браузере с помощью гостевой cookie.