term

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

Запрос term (поиск точного термина)

Назначение

Запрос term выполняет поиск точного соответствия указанному термину в поле. Основные характеристики:

  • Ищет неизмененное значение без анализа текста
  • Чувствителен к регистру по умолчанию
  • Оптимален для полей типа keyword, дат и чисел

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

GET shakespeare/_search
{
  "query": {
    "term": {
      "line_id": {
        "value": "61809"
      }
    }
  }
}

Этот запрос ищет строку с точным значением line_id = "61809".

Важные особенности

  1. Отличие от match запросов:

    • term не анализирует поисковый термин
    • Не подходит для текстовых полей (text), так как они анализируются при индексации
    • Для текстовых полей используйте match запросы
  2. Регистронезависимый поиск (начиная с OpenSearch 2.x):

GET shakespeare/_search
{
  "query": {
    "term": {
      "speaker": {
        "value": "HAMLET",
        "case_insensitive": true
      }
    }
  }
}

Внимание! В версиях OpenSearch 2.x и ранее регистронезависимый поиск может значительно снижать производительность. Рекомендуется:

  • Использовать lowercase фильтр при индексации
  • Применять термины в нижнем регистре в запросах

Пример ответа

{
  "hits": {
    "total": {
      "value": 1582,
      "relation": "eq"
    },
    "hits": [
      {
        "_index": "shakespeare",
        "_id": "32700",
        "_score": 2,
        "_source": {
          "speaker": "HAMLET",
          "text_entry": "[Aside] A little more than kin..."
        }
      }
    ]
  }
}

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

Синтаксис с параметрами:

GET _search
{
  "query": {
    "term": {
      "<поле>": {
        "value": "образец",
        ...
      }
    }
  }
}
Параметр Тип данных Описание По умолчанию
value Строка Обязательный. Точное значение для поиска (учитывает регистр и пробелы) -
boost Число с плавающей точкой Коэффициент релевантности (>1 - увеличивает, 0-1 - уменьшает) 1.0
_name Строка Имя запроса для тегирования (опционально) -
case_insensitive Логический Регистронезависимый поиск (только для OpenSearch 2.x+) false

Практические рекомендации

  1. Для текстовых полей всегда используйте match вместо term:

    // Неправильно (для text полей):
    { "term": { "description": "quick brown fox" } }
    
    // Правильно:
    { "match": { "description": "quick brown fox" } }
    
  2. Для точных значений (ID, коды, категории):

    GET products/_search
    {
      "query": {
        "term": {
          "product_code": "ABC-123"
        }
      }
    }
    
  3. Комбинируйте с другими запросами:

    GET logs/_search
    {
      "query": {
        "bool": {
          "must": [
            { "term": { "status": "error" } },
            { "range": { "timestamp": { "gte": "2023-01-01" }}}
          ]
        }
      }
    }
    
  4. Производительность:

    • Для частых запросов добавьте индекс на поле
    • Избегайте case_insensitive в favor lowercase анализаторов