wildcard
Поиск документов, содержащих термины, соответствующие шаблону с подстановочными символами
Wildcard Query (Поиск с подстановочными символами)
Основное назначение
Запрос wildcard
позволяет выполнять поиск терминов по шаблону с использованием подстановочных символов. Особенно полезен для:
- Поиска по частичным совпадениям
- Нечеткого поиска с известной структурой
- Работы с кодами, артикулами и другими структурированными данными
Поддерживаемые операторы
Оператор | Описание | Пример |
---|---|---|
* |
Соответствует нулю или более символов | H*Y найдет “HAPPY”, “HALLEY” |
? |
Соответствует любому одному символу | H?Y найдет “HAY”, но не “HAPPY” |
case_insensitive |
Флаг регистронезависимости | true /false (по умолчанию false ) |
Примеры запросов
1. Чувствительный к регистру поиск:
GET shakespeare/_search
{
"query": {
"wildcard": {
"speaker": {
"value": "H*Y",
"case_insensitive": false
}
}
}
}
2. Использование разных операторов:
H*Y
- найдет любые значения, начинающиеся на H и заканчивающиеся на YH?Y
- найдет только 3-символьные значения типа “HMY”
Параметры запроса
Базовый синтаксис:
GET _search
{
"query": {
"wildcard": {
"<поле>": {
"value": "шаб*лон",
...
}
}
}
}
Параметр | Тип данных | Описание | По умолчанию |
---|---|---|---|
value |
String | Шаблон для поиска с подстановочными символами | Обязательный |
boost |
Float | Коэффициент релевантности (>1 - увеличивает, 0-1 - уменьшает) | 1.0 |
case_insensitive |
Boolean | Регистронезависимый поиск | false |
rewrite |
String | Метод перезаписи запроса (constant_score , scoring_boolean и др.) |
constant_score |
Критические особенности производительности
-
Предупреждение:
Wildcard-запросы могут быть медленными, так как требуют перебора множества терминов. -
Золотое правило:
Избегайте размещения подстановочных символов в начале шаблона (например,*pattern
), так как это:- Крайне ресурсоемко
- Может привести к таймаутам
- Создает нагрузку на кластер
-
Оптимизация:
Для частых wildcard-запросов используйте специальныйwildcard
тип поля, который:- Создает оптимизированный индекс
- Обеспечивает высокую производительность
- Поддерживает сложные шаблоны
Практические рекомендации
-
Для префиксного поиска используйте
prefix
запрос вместоH*
:{ "query": { "prefix": { "field": "H" } } }
-
Для сложных шаблонов рассмотрите:
- Использование
wildcard
типа поля - Применение
regexp
запросов для более сложных паттернов
- Использование
-
При работе с большими индексами:
- Ограничивайте время выполнения через
timeout
- Используйте
search.allow_expensive_queries
для контроля
- Ограничивайте время выполнения через
-
Пример безопасного шаблона:
{ "query": { "wildcard": { "product_code": { "value": "ABC-202?-*", "case_insensitive": true } } } }
Такой шаблон найдет коды типа “ABC-2023-XXX” и безопасен для выполнения.
Важные ограничения
- При
search.allow_expensive_queries=false
wildcard-запросы не выполняются - Максимальная длина шаблона ограничена параметром
index.max_regex_length
(по умолчанию 1000 символов) - Не поддерживает стандартные regex-конструкции (используйте
regexp
запрос для сложных выражений)