Запрос term
Возвращает документы, содержащие точный термин в указанном поле.
Вы можете использовать запрос term для поиска документов по точному значению, например, цене, идентификатору продукта или имени пользователя.
Пример запроса
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.
Чтобы увидеть разницу в результатах поиска, попробуйте следующий пример.
-
Создайте индекс с полем
textпод названиемfull_text.PUT my-index-000001 { "mappings": { "properties": { "full_text": { "type": "text" } } } } -
Индексируйте документ со значением
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]во время анализа. -
Используйте запрос
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не возвращает результатов. -
Используйте запрос
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
|
|