Spec-Zone.ru › Elasticsearch 7
›Elasticsearch Guide [7.17] ›Query DSL ›Запросы на уровне терминов

Запрос term

Возвращает документы, содержащие точный термин в указанном поле.

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

Избегайте использования запроса term для полей типа text.

По умолчанию Elasticsearch изменяет значения полей text в процессе анализа. Это может затруднить поиск точных совпадений для значений полей text.

Для поиска значений полей text используйте запрос match вместо этого.

Пример запроса

GET /_search
{
  "query": {
    "term": {
      "user.id": {
        "value": "kimchy",
        "boost": 1.0
      }
    }
  }
}

Параметры верхнего уровня для запроса term

<field>
(Обязательно, объект) Поле, которое вы хотите искать.

Параметры для запроса <field>

value
(Обязательно, строка) Термин, который вы хотите найти в указанном поле <field>. Для возврата документа термин должен точно совпадать со значением поля, включая пробелы и регистр.
boost

(Необязательно, число с плавающей точкой) Число с плавающей точкой, используемое для уменьшения или увеличения релевантности запроса. По умолчанию 1.0.

Вы можете использовать параметр boost для корректировки релевантности результатов поиска, содержащих два или более запросов.

Значения boost относительны к значению по умолчанию 1.0. Значение boost между 0 и 1.0 уменьшает релевантность. Значение больше 1.0 увеличивает релевантность.

case_insensitive [7.10.0] Добавлено в 7.10.0.
(Необязательно, логическое значение) Разрешает нечувствительное к регистру сопоставление значений ASCII с индексированными значениями поля, если установлено в true. По умолчанию false, что означает, что чувствительность к регистру сопоставления зависит от сопоставления подлежащего поля.

Примечания

Избегайте использования запроса term для полей text

По умолчанию Elasticsearch изменяет значения полей text во время анализа. Например, стандартный анализатор стандартный анализатор изменяет значения полей text следующим образом:

  • Удаляет большую часть пунктуации
  • Разделяет оставшийся контент на отдельные слова, называемые токенами
  • Приводит токены к нижнему регистру

Для более эффективного поиска в полях text запрос match также анализирует предоставляемый терм поиска перед выполнением поиска. Это означает, что запрос match может искать в полях text по анализированным токенам, а не по точному термину.

Запрос term не анализирует терм поиска. Запрос term ищет только точный термин, который вы предоставили. Это означает, что запрос term может возвращать плохие или вообще не возвращать результаты при поиске по полям text.

Чтобы увидеть разницу в результатах поиска, попробуйте следующий пример.

  1. Создайте индекс с полем text под названием full_text.

    PUT my-index-000001
    {
      "mappings": {
        "properties": {
          "full_text": { "type": "text" }
        }
      }
    }
  2. Индексируйте документ со значением Quick Brown Foxes! в поле full_text.

    PUT my-index-000001/_doc/1
    {
      "full_text":   "Quick Brown Foxes!"
    }

    Поскольку поле full_text является полем text, Elasticsearch изменяет Quick Brown Foxes! на [quick, brown, fox] во время анализа.

  3. Используйте запрос term для поиска Quick Brown Foxes! в поле full_text. Включите параметр pretty, чтобы ответ был более читаемым.

    GET my-index-000001/_search?pretty
    {
      "query": {
        "term": {
          "full_text": "Quick Brown Foxes!"
        }
      }
    }

    Поскольку поле full_text больше не содержит точный термин Quick Brown Foxes!, запрос поиска term не возвращает результатов.

  4. Используйте запрос match для поиска Quick Brown Foxes! в поле full_text.

    GET my-index-000001/_search?pretty
    {
      "query": {
        "match": {
          "full_text": "Quick Brown Foxes!"
        }
      }
    }

    В отличие от запроса term, запрос match анализирует предоставленный терм поиска Quick Brown Foxes! перед выполнением поиска. Запрос match затем возвращает все документы, содержащие токены quick, brown или fox в поле full_text.

    Вот ответ для запроса поиска match, содержащий индексированный документ в результатах.

    {
      "took" : 1,
      "timed_out" : false,
      "_shards" : {
        "total" : 1,
        "successful" : 1,
        "skipped" : 0,
        "failed" : 0
      },
      "hits" : {
        "total" : {
          "value" : 1,
          "relation" : "eq"
        },
        "max_score" : 0.8630463,
        "hits" : [
          {
            "_index" : "my-index-000001",
            "_type" : "_doc",
            "_id" : "1",
            "_score" : 0.8630463,
            "_source" : {
              "full_text" : "Quick Brown Foxes!"
            }
          }
        ]
      }
    }

© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/7.17/query-dsl-term-query.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API