| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255 | [[query-dsl-terms-query]]=== Terms query++++<titleabbrev>Terms</titleabbrev>++++Returns documents that contain one or more *exact* terms in a provided field.The `terms` query is the same as the <<query-dsl-term-query, `term` query>>,except you can search for multiple values.[[terms-query-ex-request]]==== Example requestThe following search returns documents where the `user` field contains `kimchy`or `elasticsearch`.[source,js]----GET /_search{    "query" : {        "terms" : {            "user" : ["kimchy", "elasticsearch"],            "boost" : 1.0         }    }}----// CONSOLE[[terms-top-level-params]]==== Top-level parameters for `terms``<field>`::+--(Optional, object) Field you wish to search.The value of this parameter is an array of terms you wish to find in theprovided field. To return a document, one or more terms must exactly match afield value, including whitespace and capitalization.By default, {es} limits the `terms` query to a maximum of 65,536terms. You can change this limit using the <<index-max-terms-count,`index.max_terms_count`>> setting.[NOTE]To use the field values of an existing document as search terms, use the<<query-dsl-terms-lookup, terms lookup>> parameters.--`boost`::+--(Optional, float) Floating point number used to decrease or increase the<<relevance-scores,relevance scores>> of a query. Defaults to `1.0`.You can use the `boost` parameter to adjust relevance scores for searchescontaining two or more queries.Boost values are relative to the default value of `1.0`. A boost value between`0` and `1.0` decreases the relevance score. A value greater than `1.0`increases the relevance score.--[[terms-query-notes]]==== Notes[[query-dsl-terms-query-highlighting]]===== Highlighting `terms` queries<<request-body-search-highlighting,Highlighting>> is best-effort only. {es} may notreturn highlight results for `terms` queries depending on:* Highlighter type* Number of terms in the query[[query-dsl-terms-lookup]]===== Terms lookupTerms lookup fetches the field values of an existing document. {es} then usesthose values as search terms. This can be helpful when searching for a large setof terms.Because terms lookup fetches values from a document, the <<mapping-source-field,`_source`>> mapping field must be enabled to use terms lookup. The `_source`field is enabled by default.[NOTE]By default, {es} limits the `terms` query to a maximum of 65,536terms. This includes terms fetched using terms lookup. You can changethis limit using the <<index-max-terms-count, `index.max_terms_count`>> setting.To perform a terms lookup, use the following parameters.[[query-dsl-terms-lookup-params]]====== Terms lookup parameters`index`::(Optional, string) Name of the index from which to fetch field values.`id`::(Optional, string) <<mapping-id-field,ID>> of the document from which to fetchfield values.`path`::+--(Optional, string) Name of the field from which to fetch field values. {es} usesthese values as search terms for the query.If the field values include an array of nested inner objects, you can accessthose objects using dot notation syntax.--`routing`::(Optional, string) Custom <<mapping-routing-field, routing value>> of thedocument from which to fetch term values. If a custom routing value was providedwhen the document was indexed, this parameter is required.[[query-dsl-terms-lookup-example]]====== Terms lookup exampleTo see how terms lookup works, try the following example.  . Create an index with a `keyword` field named `color`.+--[source,js]----PUT my_index{    "mappings" : {        "properties" : {            "color" : { "type" : "keyword" }        }    }}----// CONSOLE--. Index a document with an ID of 1 and values of `["blue", "green"]` in the`color` field.+--[source,js]----PUT my_index/_doc/1{  "color":   ["blue", "green"]}----// CONSOLE// TEST[continued]--. Index another document with an ID of 2 and value of `blue` in the `color`field.+--[source,js]----PUT my_index/_doc/2{  "color":   "blue"}----// CONSOLE// TEST[continued]--. Use the `terms` query with terms lookup parameters to find documentscontaining one or more of the same terms as document 2. Include the `pretty`parameter so the response is more readable.+--////[source,js]----POST my_index/_refresh----// CONSOLE// TEST[continued]////[source,js]----GET my_index/_search?pretty{  "query": {    "terms": {        "color" : {            "index" : "my_index",            "id" : "2",            "path" : "color"        }    }  }}----// CONSOLE// TEST[continued]Because document 2 and document 1 both contain `blue` as a value in the `color`field, {es} returns both documents.[source,js]----{  "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",        "_type" : "_doc",        "_id" : "1",        "_score" : 1.0,        "_source" : {          "color" : [            "blue",            "green"          ]        }      },      {        "_index" : "my_index",        "_type" : "_doc",        "_id" : "2",        "_score" : 1.0,        "_source" : {          "color" : "blue"        }      }    ]  }}----// TESTRESPONSE[s/"took" : 17/"took" : $body.took/]--
 |