Term query
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.
Avoid using the term
query for text
fields.
By default, Elasticsearch changes the values of text
fields as part of analysis. This can make finding exact matches for text
field values difficult.
To search text
field values, use the match
query instead.
Example request
GET /_search
{
"query": {
"term": {
"user.id": {
"value": "kimchy",
"boost": 1.0
}
}
}
}
Top-level parameters for term
<field>
(Required, object) Field you wish to search.
Parameters for <field>
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 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.
Notes
Avoid using the term
query for text
fields
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
text
field calledfull_text
.PUT my-index-000001
{
"mappings": {
"properties": {
"full_text": { "type": "text" }
}
}
}
Index a document with a value of
Quick Brown Foxes!
in thefull_text
field.PUT my-index-000001/_doc/1
{
"full_text": "Quick Brown Foxes!"
}
Because
full_text
is atext
field, Elasticsearch changesQuick Brown Foxes!
to[quick, brown, fox]
during analysis.Use the
term
query to search forQuick Brown Foxes!
in thefull_text
field. Include thepretty
parameter so the response is more readable.GET my-index-000001/_search?pretty
{
"query": {
"term": {
"full_text": "Quick Brown Foxes!"
}
}
}
Because the
full_text
field no longer contains the exact termQuick Brown Foxes!
, theterm
query search returns no results.Use the
match
query to search forQuick Brown Foxes!
in thefull_text
field.GET my-index-000001/_search?pretty
{
"query": {
"match": {
"full_text": "Quick Brown Foxes!"
}
}
}
Unlike the
term
query, thematch
query analyzes your provided search term,Quick Brown Foxes!
, before performing a search. Thematch
query then returns any documents containing thequick
,brown
, orfox
tokens in thefull_text
field.Here’s the response for the
match
query 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-000001",
"_type" : "_doc",
"_id" : "1",
"_score" : 0.8630463,
"_source" : {
"full_text" : "Quick Brown Foxes!"
}
}
]
}
}