基于文档的ids返回文档,这种查询会使用存储在_id
字段的文档id值
Example Request
GET /_search
{
"query": {
"ids" : {
"values" : ["1", "4", "100"]
}
}
}
返回所提供的字段中包含确切词的文档。
你可以使用term query
根据精确的值来查找文档,比如价格、产品ID或用户名等等。
警告
避免对text
类型的字段使用term query
默认情况下,ElasticSearch 会在分析该字段值的过程中改变它的值(即分词,将一个句子拆分成一个个的token)
为了能搜索text
字段的值,请使用match query
替代
Example request
GET /_search
{
"query": {
"term": {
"user": {
"value": "Kimchy",
"boost": 1.0
}
}
}
}
value
(必须,字符串):你希望在指定< field >找到的词。返回的文档,该value必须完全匹配文档字段的值,包括空格
和大小写
。
boost
(可选,浮点数):用于增加或减少查询的相关性得分的浮点数,默认为1.0
。
您可以使用boost
参数来调整包含两个或多个查询的搜索的相关性得分。
Boost的值是相对于默认值1.0。boost的值在0到1.0之间会会降低相关性得分。大于1.0会增加相关性得分。
避免对text
类型的字段使用term query
默认情况下,ElasticSearch会在分析期间改变字段的值(将句子拆分成一个个的词),比如,默认的standard analyzer
标准分词器根据以下的规则改变字段的值:
token
token
转换成小写(将复数单词转换成单数)为了更好地搜索text
类型的字段,match query
也会在执行搜索之前分析你所提供的搜索词。这意味着match query
可以在文本字段中搜索已分析过的词,而不是精确匹配。
term query
不会分析搜索词,它只会精确匹配你提供的搜索词,意味着在搜索text
类型的字段时,term query
可能返回较少的文档,或者没有文档返回。
为了查看搜索结果中的不同,请尝试以下的示例
full_text
,类型为text
的字段PUT my-index-000001
{
"mappings": {
"properties": {
"full_text": { "type": "text" }
}
}
}
PUT my-index-000001/_doc/1
{
"full_text": "Quick Brown Foxes!"
}
因为
full_text
字段是text
类型的,所以ElasticSearch在分析的过程中将*Quick Brown Foxes!*改变成了
[quick, brown, fox]
term query
在full_text字段上搜索Quick Brown Foxes!,携带pretty
参数将使的响应结果更加具有可读性GET my-index-000001/_search?pretty
{
"query": {
"term": {
"full_text": "Quick Brown Foxes!"
}
}
}
因为full_text字段不再包含*Quick Brown Foxes!*这个精确的词(被es分词了),所以这个查询没有结果返回
match query
在full_text字段上搜索Quick Brown Foxes!GET my-index-000001/_search?pretty
{
"query": {
"match": {
"full_text": "Quick Brown Foxes!"
}
}
}
与
term query
不同,match query
在执行搜索之前会分析您提供的搜索词: Quick Brown Foxes!,然后,该查询返回full_text字段中包含quick、brown或fox等token的所有文档。
下面是对结果中包含索引文档的匹配查询搜索的响应。
{
"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!"
}
}
]
}
}
警告
在7.0.0中弃用
类型和类型查询已被弃用,并正在被逐步删除。详细信息请参阅删除映射类型
。
过滤匹配指定文档映射类型的文档
GET /_search
{
"query": {
"type": {
"value": "_doc"
}
}
}
返回拥有指定字段并且其值 匹配
指定的通配符模式
的文档
通配符操作符是匹配一个或多个字符的占位符。例如,
*
通配符可以匹配零个或多个字符。你可以将通配符操作符与其他字符结合使用起来创建通配符模式。
Example Request
以下的搜索返回user
字段的值以ki开头和y结尾的文档,能被匹配到的词包括kiy, kity, 或者 kimchy
GET /_search
{
"query": {
"wildcard": {
"user": {
"value": "ki*y",
"boost": 1.0,
"rewrite": "constant_score"
}
}
}
}
?
,匹配任何单个字符*
,匹配0个或多个字符,包括空字符
警告
避免以*
或?
开头的模式。这可能增加查找匹配文档所需的迭代次数,并降低搜索性能。
boost
(可选,浮点数):用于增加或减少查询的相关性得分的浮点数,默认为1.0
。
您可以使用boost
参数来调整包含两个或多个查询的搜索的相关性得分。
Boost的值是相对于默认值1.0。boost的值在0到1.0之间会会降低相关性得分。大于1.0会增加相关性得分。
rewrite
(可选,字符串):用于重写查询的方法,有关有效值和更多信息,请参见rewrite
参数。
允许昂贵的查询
如果
search.allow_expensive_queries
setting参数被设置为false
,通配符查询将不会执行。