| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 | [[query-dsl-term-query]]=== Term QueryThe `term` query finds documents that contain the *exact* term specifiedin the inverted index.  For instance:[source,js]--------------------------------------------------{    "term" : { "user" : "Kimchy" } <1>}--------------------------------------------------<1> Finds documents which contain the exact term `Kimchy` in the inverted index    of the `user` field.A `boost` parameter can be specified to give this `term` query a higherrelevance score than another query, for instance:[source,js]--------------------------------------------------GET /_search{  "query": {    "bool": {      "should": [        {          "term": {            "status": {              "value": "urgent",              "boost": 2.0 <1>            }          }        },        {          "term": {            "status": "normal" <2>          }        }      ]    }  }}--------------------------------------------------<1> The `urgent` query clause has a boost of `2.0`, meaning it is twice as important    as the query clause for `normal`.<2> The `normal` clause has the default neutral boost of `1.0`..Why doesn't the `term` query match my document?**************************************************String fields can be `analyzed` (treated as full text, like the body of anemail), or `not_analyzed` (treated as exact values, like an email address or azip code).  Exact values (like numbers, dates, and `not_analyzed` strings) havethe exact value specified in the field added to the inverted index in orderto make them searchable.By default, however, `string` fields are `analyzed`. This means that theirvalues are first passed through an <<analysis,analyzer>> to produce a list ofterms, which are then added to the inverted index.There are many ways to analyze text: the default<<analysis-standard-analyzer,`standard` analyzer>> drops most punctuation,breaks up text into individual words, and lower cases them.    For instance,the `standard` analyzer would turn the string ``Quick Brown Fox!'' into theterms [`quick`, `brown`, `fox`].This analysis process makes it possible to search for individual wordswithin a big block of full text.The `term` query looks for the *exact* term in the field's inverted index --it doesn't know anything about the field's analyzer.  This makes it useful forlooking up values in `not_analyzed` string fields, or in numeric or datefields.  When querying full text fields, use the<<query-dsl-match-query,`match` query>> instead, which understands how the fieldhas been analyzed.To demonstrate, try out the example below.  First, create an index, specifying the field mappings, and index a document:[source,js]--------------------------------------------------PUT my_index{  "mappings": {    "my_type": {      "properties": {        "full_text": {          "type":  "string" <1>        },        "exact_value": {          "type":  "string",          "index": "not_analyzed" <2>        }      }    }  }}PUT my_index/my_type/1{  "full_text":   "Quick Foxes!", <3>  "exact_value": "Quick Foxes!"  <4>}--------------------------------------------------// AUTOSENSE<1> The `full_text` field is `analyzed` by default.<2> The `exact_value` field is set to be `not_analyzed`.<3> The `full_text` inverted index will contain the terms: [`quick`, `foxes`].<4> The `exact_value` inverted index will contain the exact term: [`Quick Foxes!`].Now, compare the results for the `term` query and the `match` query:[source,js]--------------------------------------------------GET my_index/my_type/_search{  "query": {    "term": {      "exact_value": "Quick Foxes!" <1>    }  }}GET my_index/my_type/_search{  "query": {    "term": {      "full_text": "Quick Foxes!" <2>    }  }}GET my_index/my_type/_search{  "query": {    "term": {      "exact_value": "foxes" <3>    }  }}GET my_index/my_type/_search{  "query": {    "match": {      "full_text": "Quick Foxes!" <4>    }  }}--------------------------------------------------// AUTOSENSE<1> This query matches because the `exact_value` field contains the exact    term `Quick Foxes!`.<2> This query does not match, because the `full_text` field only contains    the terms `quick` and `foxes`. It does not contain the exact term    `Quick Foxes!`.<3> A `term` query for the term `foxes` matches the `full_text` field.<4> This `match` query on the `full_text` field first analyzes the query string,    then looks for documents containing `quick` or `foxes` or both.**************************************************
 |