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=falsewildcard-запросы не выполняются - Максимальная длина шаблона ограничена параметром
index.max_regex_length(по умолчанию 1000 символов) - Не поддерживает стандартные regex-конструкции (используйте
regexpзапрос для сложных выражений)