Запрос term
Возвращает документы, содержащие точный термин в указанном поле.
Вы можете использовать запрос term для поиска документов на основе точного значения, такого как цена, идентификатор продукта или имя пользователя.
Пример запроса
resp = client.search(
query={
"term": {
"user.id": {
"value": "kimchy",
"boost": 1
}
}
},
)
print(resp) response = client.search(
body: {
query: {
term: {
'user.id' => {
value: 'kimchy',
boost: 1
}
}
}
}
)
puts response const response = await client.search({
query: {
term: {
"user.id": {
value: "kimchy",
boost: 1,
},
},
},
});
console.log(response); 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.resp = client.indices.create( index="my-index-000001", mappings={ "properties": { "full_text": { "type": "text" } } }, ) print(resp)response = client.indices.create( index: 'my-index-000001', body: { mappings: { properties: { full_text: { type: 'text' } } } } ) puts responseres, err := es.Indices.Create( "my-index-000001", es.Indices.Create.WithBody(strings.NewReader(`{ "mappings": { "properties": { "full_text": { "type": "text" } } } }`)), ) fmt.Println(res, err)const response = await client.indices.create({ index: "my-index-000001", mappings: { properties: { full_text: { type: "text", }, }, }, }); console.log(response);PUT my-index-000001 { "mappings": { "properties": { "full_text": { "type": "text" } } } } -
Добавьте документ со значением
Quick Brown Foxes!в полеfull_text.resp = client.index( index="my-index-000001", id="1", document={ "full_text": "Quick Brown Foxes!" }, ) print(resp)response = client.index( index: 'my-index-000001', id: 1, body: { full_text: 'Quick Brown Foxes!' } ) puts responseres, err := es.Index( "my-index-000001", strings.NewReader(`{ "full_text": "Quick Brown Foxes!" }`), es.Index.WithDocumentID("1"), es.Index.WithPretty(), ) fmt.Println(res, err)const response = await client.index({ index: "my-index-000001", id: 1, document: { full_text: "Quick Brown Foxes!", }, }); console.log(response);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для лучшей читаемости ответа.resp = client.search( index="my-index-000001", pretty=True, query={ "term": { "full_text": "Quick Brown Foxes!" } }, ) print(resp)response = client.search( index: 'my-index-000001', pretty: true, body: { query: { term: { full_text: 'Quick Brown Foxes!' } } } ) puts responseres, err := es.Search( es.Search.WithIndex("my-index-000001"), es.Search.WithBody(strings.NewReader(`{ "query": { "term": { "full_text": "Quick Brown Foxes!" } } }`)), es.Search.WithPretty(), ) fmt.Println(res, err)const response = await client.search({ index: "my-index-000001", pretty: "true", query: { term: { full_text: "Quick Brown Foxes!", }, }, }); console.log(response);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.resp = client.search( index="my-index-000001", pretty=True, query={ "match": { "full_text": "Quick Brown Foxes!" } }, ) print(resp)response = client.search( index: 'my-index-000001', pretty: true, body: { query: { match: { full_text: 'Quick Brown Foxes!' } } } ) puts responseres, err := es.Search( es.Search.WithIndex("my-index-000001"), es.Search.WithBody(strings.NewReader(`{ "query": { "match": { "full_text": "Quick Brown Foxes!" } } }`)), es.Search.WithPretty(), ) fmt.Println(res, err)const response = await client.search({ index: "my-index-000001", pretty: "true", query: { match: { full_text: "Quick Brown Foxes!", }, }, }); console.log(response);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", "_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/8.17/query-dsl-term-query.html