Запрос Terms
Возвращает документы, содержащие один или несколько точных терминов в указанном поле.
Запрос terms такой же, как запрос term, за исключением возможности поиска по нескольким значениям. Документ будет соответствовать, если он содержит хотя бы один из терминов. Для поиска документов, содержащих более одного совпавшего термина, используйте запрос terms_set.
Пример запроса
Следующий запрос возвращает документы, где поле user.id содержит kimchy или elkbee.
resp = client.search(
query={
"terms": {
"user.id": [
"kimchy",
"elkbee"
],
"boost": 1
}
},
)
print(resp) response = client.search(
body: {
query: {
terms: {
'user.id' => [
'kimchy',
'elkbee'
],
boost: 1
}
}
}
)
puts response const response = await client.search({
query: {
terms: {
"user.id": ["kimchy", "elkbee"],
boost: 1,
},
},
});
console.log(response); GET /_search
{
"query": {
"terms": {
"user.id": [ "kimchy", "elkbee" ],
"boost": 1.0
}
}
} Параметры верхнего уровня для запроса terms
-
<field> -
(Необязательно, объект) Поле, которое вы хотите искать.
Значение этого параметра — массив терминов, которые вы хотите найти в заданном поле. Для возврата документа один или несколько терминов должны точно совпадать со значением поля, включая пробелы и регистр.
По умолчанию Elasticsearch ограничивает запрос
termsмаксимальным количеством 65 536 терминов. Вы можете изменить это ограничение, используя настройкуindex.max_terms_count.Для использования значений полей существующего документа в качестве поисковых терминов используйте параметры поиска терминов.
-
boost -
(Необязательно, число с плавающей запятой) Число с плавающей запятой, используемое для уменьшения или увеличения релевантности запроса. По умолчанию
1.0.Вы можете использовать параметр
boostдля корректировки релевантности для запросов, содержащих два или более запросов.Значения повышения относительны к значению по умолчанию
1.0. Значение повышения от0до1.0уменьшает релевантность. Значение больше1.0увеличивает релевантность.
Примечания
Подсвечивание запросов terms
Подсветка — это попытка. Elasticsearch может не возвращать результаты подсветки для запросов terms в зависимости от:
- Тип хайлайтера
- Количество терминов в запросе
Поиск терминов
Поиск терминов извлекает значения поля из существующего документа. Затем Elasticsearch использует эти значения в качестве поисковых терминов для запроса. Это может быть полезно при поиске по большому набору терминов.
Для запуска поиска терминов поле _source должно быть включено. Вы не можете использовать межкластерный поиск для запуска поиска терминов в удалённом индексе.
По умолчанию Elasticsearch ограничивает запрос terms максимальным количеством 65 536 терминов. Это включает термины, извлеченные с помощью поиска терминов. Вы можете изменить это ограничение, используя настройку index.max_terms_count.
Для уменьшения сетевого трафика поиск терминов будет извлекать значения документа из фрагмента на локальном узле данных, если это возможно. Если данные терминов не велики, рассмотрите использование индекса с одним первичным фрагментом, полностью реплицированным на всех соответствующих узлах данных, чтобы минимизировать сетевой трафик.
Для выполнения поиска терминов используйте следующие параметры.
Параметры поиска терминов
-
index - (Обязательно, строка) Название индекса, из которого нужно извлечь значения поля.
-
id - (Обязательно, строка) ID документа, из которого нужно извлечь значения поля.
-
path -
(Обязательно, строка) Название поля, из которого нужно извлечь значения поля. Elasticsearch использует эти значения в качестве поисковых терминов для запроса.
Если значения поля включают массив вложенных внутренних объектов, вы можете получить доступ к этим объектам, используя синтаксис с точкой.
-
routing - (Необязательно, строка) Пользовательское значение маршрутизации документа, из которого нужно извлечь значения термина. Если при индексировании документа было указано пользовательское значение маршрутизации, этот параметр требуется.
Пример поиска терминов
Чтобы увидеть, как работает поиск терминов, попробуйте следующий пример.
-
Создайте индекс с полем
keywordс именемcolor.resp = client.indices.create( index="my-index-000001", mappings={ "properties": { "color": { "type": "keyword" } } }, ) print(resp)response = client.indices.create( index: 'my-index-000001', body: { mappings: { properties: { color: { type: 'keyword' } } } } ) puts responseres, err := es.Indices.Create( "my-index-000001", es.Indices.Create.WithBody(strings.NewReader(`{ "mappings": { "properties": { "color": { "type": "keyword" } } } }`)), ) fmt.Println(res, err)const response = await client.indices.create({ index: "my-index-000001", mappings: { properties: { color: { type: "keyword", }, }, }, }); console.log(response);PUT my-index-000001 { "mappings": { "properties": { "color": { "type": "keyword" } } } } -
Индексируйте документ с идентификатором 1 и значениями
["blue", "green"]в полеcolor.resp = client.index( index="my-index-000001", id="1", document={ "color": [ "blue", "green" ] }, ) print(resp)response = client.index( index: 'my-index-000001', id: 1, body: { color: [ 'blue', 'green' ] } ) puts responseres, err := es.Index( "my-index-000001", strings.NewReader(`{ "color": [ "blue", "green" ] }`), es.Index.WithDocumentID("1"), es.Index.WithPretty(), ) fmt.Println(res, err)const response = await client.index({ index: "my-index-000001", id: 1, document: { color: ["blue", "green"], }, }); console.log(response);PUT my-index-000001/_doc/1 { "color": ["blue", "green"] } -
Индексируйте ещё один документ с идентификатором 2 и значением
blueв полеcolor.resp = client.index( index="my-index-000001", id="2", document={ "color": "blue" }, ) print(resp)response = client.index( index: 'my-index-000001', id: 2, body: { color: 'blue' } ) puts responseres, err := es.Index( "my-index-000001", strings.NewReader(`{ "color": "blue" }`), es.Index.WithDocumentID("2"), es.Index.WithPretty(), ) fmt.Println(res, err)const response = await client.index({ index: "my-index-000001", id: 2, document: { color: "blue", }, }); console.log(response);PUT my-index-000001/_doc/2 { "color": "blue" } -
Используйте запрос
termsс параметрами поиска терминов, чтобы найти документы, содержащие один или несколько из тех же терминов, что и документ 2. Включите параметрpretty, чтобы ответ был более читабельным.resp = client.search( index="my-index-000001", pretty=True, query={ "terms": { "color": { "index": "my-index-000001", "id": "2", "path": "color" } } }, ) print(resp)response = client.search( index: 'my-index-000001', pretty: true, body: { query: { terms: { color: { index: 'my-index-000001', id: '2', path: 'color' } } } } ) puts responseres, err := es.Search( es.Search.WithIndex("my-index-000001"), es.Search.WithBody(strings.NewReader(`{ "query": { "terms": { "color": { "index": "my-index-000001", "id": "2", "path": "color" } } } }`)), es.Search.WithPretty(), ) fmt.Println(res, err)const response = await client.search({ index: "my-index-000001", pretty: "true", query: { terms: { color: { index: "my-index-000001", id: "2", path: "color", }, }, }, }); console.log(response);GET my-index-000001/_search?pretty { "query": { "terms": { "color" : { "index" : "my-index-000001", "id" : "2", "path" : "color" } } } }Так как документ 2 и документ 1 оба содержат
blueкак значение в полеcolor, Elasticsearch возвращает оба документа.{ "took" : 17, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 2, "relation" : "eq" }, "max_score" : 1.0, "hits" : [ { "_index" : "my-index-000001", "_id" : "1", "_score" : 1.0, "_source" : { "color" : [ "blue", "green" ] } }, { "_index" : "my-index-000001", "_id" : "2", "_score" : 1.0, "_source" : { "color" : "blue" } } ] } }
© 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-terms-query.html
|
|