123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247 |
- [[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 request
- The following search returns documents where the `user` field contains `kimchy`
- or `elasticsearch`.
- [source,console]
- ----
- GET /_search
- {
- "query" : {
- "terms" : {
- "user" : ["kimchy", "elasticsearch"],
- "boost" : 1.0
- }
- }
- }
- ----
- [[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 the
- provided field. To return a document, one or more terms must exactly match a
- field value, including whitespace and capitalization.
- By default, {es} limits the `terms` query to a maximum of 65,536
- terms. 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 searches
- containing 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
- <<highlighting,Highlighting>> is best-effort only. {es} may not
- return highlight results for `terms` queries depending on:
- * Highlighter type
- * Number of terms in the query
- [[query-dsl-terms-lookup]]
- ===== Terms lookup
- Terms lookup fetches the field values of an existing document. {es} then uses
- those values as search terms. This can be helpful when searching for a large set
- of 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,536
- terms. This includes terms fetched using terms lookup. You can change
- this 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`::
- (Required, string) Name of the index from which to fetch field values.
- `id`::
- (Required, string) <<mapping-id-field,ID>> of the document from which to fetch
- field values.
- `path`::
- +
- --
- (Required, string) Name of the field from which to fetch field values. {es} uses
- these values as search terms for the query.
- If the field values include an array of nested inner objects, you can access
- those objects using dot notation syntax.
- --
- `routing`::
- (Optional, string) Custom <<mapping-routing-field, routing value>> of the
- document from which to fetch term values. If a custom routing value was provided
- when the document was indexed, this parameter is required.
- [[query-dsl-terms-lookup-example]]
- ====== Terms lookup example
- To see how terms lookup works, try the following example.
- . Create an index with a `keyword` field named `color`.
- +
- --
- [source,console]
- ----
- PUT my_index
- {
- "mappings" : {
- "properties" : {
- "color" : { "type" : "keyword" }
- }
- }
- }
- ----
- --
- . Index a document with an ID of 1 and values of `["blue", "green"]` in the
- `color` field.
- +
- --
- [source,console]
- ----
- PUT my_index/_doc/1
- {
- "color": ["blue", "green"]
- }
- ----
- // TEST[continued]
- --
- . Index another document with an ID of 2 and value of `blue` in the `color`
- field.
- +
- --
- [source,console]
- ----
- PUT my_index/_doc/2
- {
- "color": "blue"
- }
- ----
- // TEST[continued]
- --
- . Use the `terms` query with terms lookup parameters to find documents
- containing one or more of the same terms as document 2. Include the `pretty`
- parameter so the response is more readable.
- +
- --
- ////
- [source,console]
- ----
- POST my_index/_refresh
- ----
- // TEST[continued]
- ////
- [source,console]
- ----
- GET my_index/_search?pretty
- {
- "query": {
- "terms": {
- "color" : {
- "index" : "my_index",
- "id" : "2",
- "path" : "color"
- }
- }
- }
- }
- ----
- // TEST[continued]
- Because document 2 and document 1 both contain `blue` as a value in the `color`
- field, {es} returns both documents.
- [source,console-result]
- ----
- {
- "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",
- "_id" : "1",
- "_score" : 1.0,
- "_source" : {
- "color" : [
- "blue",
- "green"
- ]
- }
- },
- {
- "_index" : "my_index",
- "_id" : "2",
- "_score" : 1.0,
- "_source" : {
- "color" : "blue"
- }
- }
- ]
- }
- }
- ----
- // TESTRESPONSE[s/"took" : 17/"took" : $body.took/]
- --
|