Term query
source:www.elastic.co/guide/en/el…
path:Elasticsearch - Query DSL - Term-level queries - Tem query
搜索指定field包含指定term的document
你可以使用term query基于一个精确的值来查找document,例如price,product ID或者username。
Warning:应避免在textfield上使用term query。默认地,Elasticsearch改变了text field的值,因为存在分析的过程。这让对textfield的精确匹配变得困难。要搜索text field,请使用match query。
Example request
GET /_search
{
"query": {
"term": {
"user.id": {
"value": "kimchy",
"boost": 1.0
}
}
}
}
Top-level parameters for term
field
(Required,object)要搜索的Field
Parameters for field
value
(Required,string)你要在指定Field中搜索的term。返回的document的对应field的值必须与搜索的term完全一致,包括空格和大小写
boost
(Optional,float)浮点数,用于减少或增加一个query的score。默认为1.0。你可以使用boost参数来调整包含两个或多个query的搜索的分数。boost的值是相对1.0来说的。在0到1.0的boost会减少score,而大于1.0的boost会增加score。
case_insensitive[7.10.0]
(Optional,Boolean)默认为false,当设为true时,允许field索引的值与要搜索的term进行大小写不敏感的匹配。默认为false这意味着大小写是否敏感依赖于底层field的mapping。
Note
Avoid using the term query for text field
默认地,Elasticsearch会在分析过程中改变text field的值。例如,默认的标准analyzer会像下面一样改变text field。
- 移除大部分标点符号
- 讲内容分割为单独的word,称之为tokens
- 对token进行小写化
为了更好地搜索text field,match query会在进行搜索之前对你要搜索的term也进行分析。这意味着match query是对text field分析后的token进行搜索,而不是准确的token。
term query并不会对要搜索的term进行分析。term query只会对你所提供的精确的term进行搜素。这意味着当term query对text field进行搜索时,结果可能不理想甚至是错的。
下面的例子展示了搜索结果的差异
- 创建一个带有名为
full_text的textfield的索引
PUT my-index-000001
{
"mappings": {
"properties": {
"full_text": { "type": "text" }
}
}
}
- 索引进一个document,其
full_textfield值为Quick Brown Foxes!
PUT my-index-000001/_doc/1
{
"full_text": "Quick Brown Foxes!"
}
由于full_text field是text field,Elasticsearch会将 Quick Brown Foxes! 分析为 [quick, brown, fox]。
- 使用
termquery在full_textfield上搜索Quick Brown Foxes!
GET my-index-000001/_search?pretty
{
"query": {
"term": {
"full_text": "Quick Brown Foxes!"
}
}
}
因为full_text field不再包含Quick Brown Foxes!这个精确的term,所以term query不会返回结果。
- 使用
matchquery来搜索Quick Brown Foxes!
GET my-index-000001/_search?pretty
{
"query": {
"match": {
"full_text": "Quick Brown Foxes!"
}
}
}
与term query不同,match query 对所提供的 Quick Brown Foxes!在搜索前进行分析。match query会返回在full_text field上包含quick, brown, 或fox token的所有document。
下面是match query的响应
{
"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",
"_id" : "1",
"_score" : 0.8630463,
"_source" : {
"full_text" : "Quick Brown Foxes!"
}
}
]
}
}