prefix

Поиск документов, содержащих термины с указанным префиксом

Запрос prefix (поиск по префиксу)

Назначение

Запрос prefix выполняет поиск терминов, начинающихся с указанной приставки (префикса). Используется для:

  • Автодополнения
  • Поиска по начальным символам
  • Классификации данных с общими префиксами

Базовый синтаксис

GET shakespeare/_search
{
  "query": {
    "prefix": {
      "speaker": "KING H"
    }
  }
}

Этот запрос ищет документы, где поле speaker содержит термины, начинающиеся на “KING H”.

Расширенный синтаксис с параметрами

GET shakespeare/_search
{
  "query": {
    "prefix": {
      "speaker": {
        "value": "KING H",
        "boost": 1.5,
        "case_insensitive": true,
        "rewrite": "scoring_boolean"
      }
    }
  }
}

Параметры запроса

Параметр Тип данных Описание По умолчанию
value Строка Обязательный. Искомый префикс -
boost Число с плавающей точкой Коэффициент усиления релевантности (>1 - увеличивает, 0-1 - уменьшает) 1.0
case_insensitive Логический Регистронезависимый поиск. Если true, игнорирует регистр символов false
rewrite Строка Метод перезаписи запроса. Допустимые значения: constant_score, scoring_boolean и др. constant_score

Особенности работы

  1. Производительность:

    • При включенной настройке index_prefixes в маппинге поля запрос выполняется оптимально
    • При search.allow_expensive_queries=false запросы prefix не выполняются (кроме случаев с index_prefixes)
  2. Регистр символов:

    • По умолчанию поиск чувствителен к регистру
    • Для регистронезависимого поиска используйте "case_insensitive": true
  3. Примеры использования:

    // Поиск продуктов с кодом, начинающимся на "A12"
    GET products/_search
    {
      "query": {
        "prefix": {
          "product_code": "A12"
        }
      }
    }
    
    // Поиск городов, названия которых начинаются на "сан"
    GET cities/_search
    {
      "query": {
        "prefix": {
          "name": {
            "value": "сан",
            "case_insensitive": true
          }
        }
      }
    }
    
  4. Рекомендации:

    • Для полей с длинными значениями установите index_prefixes в маппинге
    • Избегайте очень коротких префиксов (1-2 символа) на больших индексах
    • Для сложных сценариев автодополнения рассмотрите completion suggester