Term queryedit
Returns documents that contain an exact term in a provided field.
You can use the term query to find documents based on a precise value such as
a price, a product ID, or a username.
Example requestedit
GET /_search
{
"query": {
"term": {
"user": {
"value": "Kimchy",
"boost": 1.0
}
}
}
}
Top-level parameters for termedit
-
<field> - (Required, object) Field you wish to search.
Parameters for <field>edit
-
value -
(Required, string) Term you wish to find in the provided
<field>. To return a document, the term must exactly match the field value, including whitespace and capitalization. -
boost -
(Optional, float) Floating point number used to decrease or increase the relevance scores of a query. Defaults to
1.0.You can use the
boostparameter 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 between0and1.0decreases the relevance score. A value greater than1.0increases the relevance score.
Notesedit
Avoid using the term query for text fieldsedit
By default, Elasticsearch changes the values of text fields during analysis. For
example, the default standard analyzer changes
text field values as follows:
- Removes most punctuation
- Divides the remaining content into individual words, called tokens
- Lowercases the tokens
To better search text fields, the match query also analyzes your provided
search term before performing a search. This means the match query can search
text fields for analyzed tokens rather than an exact term.
The term query does not analyze the search term. The term query only
searches for the exact term you provide. This means the term query may
return poor or no results when searching text fields.
To see the difference in search results, try the following example.
-
Create an index with a
textfield calledfull_text.PUT my_index { "mappings" : { "properties" : { "full_text" : { "type" : "text" } } } } -
Index a document with a value of
Quick Brown Foxes!in thefull_textfield.PUT my_index/_doc/1 { "full_text": "Quick Brown Foxes!" }Because
full_textis atextfield, Elasticsearch changesQuick Brown Foxes!to[quick, brown, fox]during analysis. -
Use the
termquery to search forQuick Brown Foxes!in thefull_textfield. Include theprettyparameter so the response is more readable.GET my_index/_search?pretty { "query": { "term": { "full_text": "Quick Brown Foxes!" } } }Because the
full_textfield no longer contains the exact termQuick Brown Foxes!, thetermquery search returns no results. -
Use the
matchquery to search forQuick Brown Foxes!in thefull_textfield.GET my_index/_search?pretty { "query": { "match": { "full_text": "Quick Brown Foxes!" } } }Unlike the
termquery, thematchquery analyzes your provided search term,Quick Brown Foxes!, before performing a search. Thematchquery then returns any documents containing thequick,brown, orfoxtokens in thefull_textfield.Here’s the response for the
matchquery search containing the indexed document in the results.{ "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", "_type" : "_doc", "_id" : "1", "_score" : 0.8630463, "_source" : { "full_text" : "Quick Brown Foxes!" } } ] } }