本文参考官方提供api提炼出来的html
https://www.elastic.co/guide/en/elasticsearch/reference/current/search.htmlgit
Term Level Queriesgithub
Term Query正则表达式
term query查找包含倒排索引中指定的确切term的文档。api
GET _search { "query": { "bool": { "should": [ { "term": { "status": { "value": "urgent", "boost": 2.0 } } }, { "term": { "status": "normal" } } ] } } }
为何term查询不符合个人文档?app
字符串字段能够是类型text
(视为全文,如电子邮件正文),或keyword
(视为确切的值,如电子邮件地址或邮政编码)。确切的值(如数字,日期和关键字)具备在添加到倒排索引的字段中指定的确切值,以便使它们可搜索。elasticsearch
term
查询查找的确切领域的倒排索引项-它不知道该字段的分析什么。这使得在关键字字段或数字或日期字段中查找值很是有用。查询全文字段时,请改用 match
查询,该查询了解字段的分析方式。ide
Terms Queryui
筛选包含与任何提供的terms (not analyzed)匹配的字段的文档编码
GET /_search { "query": { "terms" : { "user" : ["kimchy", "elasticsearch"]} } }
terms 查找机制支持如下选项:
|
从中获取term值的索引。 |
|
从中获取term值的类型。 |
|
要从中获term语值的文档的ID。 |
|
该字段指定为获取 |
|
检索外部terms doc时要使用的自定义路由值。 |
Terms Set Query
返回与至少一个或多个提供的terms匹配的任何文档。这些terms未通过分析,所以必须彻底匹配。必须匹配的terms数量因文档而异,而且由最小匹配字段控制或每一个文档计算至少应匹配脚本。
GET /my-index/_search { "query": { "terms_set": { "codes" : { "terms" : ["abc", "def", "ghi"], "minimum_should_match_field": "required_matches" } } } }
Range Query
匹配具备特定范围内的字段的字段的文档。Lucene查询的类型取决于字段类型,对于string
字段TermRangeQuery
,而对于数字/日期字段,查询是一个NumericRangeQuery
。
GET _search { "query": { "range" : { "age" : { "gte" : 10, "lte" : 20, "boost" : 2.0 } } } }
range
query接受如下参数:
|
大于或等于 |
|
比...更棒 |
|
小于或等于 |
|
少于 |
|
设置查询的提高值,默认为 |
Date Range Query
GET _search { "query": { "range" : { "date" : { "gte" : "now-1d/d", "lt" : "now/d" } } } }
使用日期数学将日期舍入到最近的日,月,小时等时,舍入日期取决于范围的结尾是包含仍是排除。
向上舍入移动到舍入范围的最后一毫秒,并向下舍入到舍入范围的第一毫秒。例如:
|
大于日期舍入: |
|
大于或等于向下舍入的日期: |
|
小于向下舍入的日期: |
|
小于或等于向上舍入的日期: |
范围查询中的时区
经过在日期值自己中指定时区(若是format
接受它),能够将日期从另外一个时区转换为UTC ,或者能够将其指定为time_zone
参数:
GET _search { "query": { "range" : { "timestamp" : { "gte": "2015-01-01 00:00:00", "lte": "now", "time_zone": "+01:00" } } } }
查询范围字段
range
查询能够在类型的字段上使用range
,容许将查询中指定的范围与文档中的范围字段值进行匹配。该relation
参数控制这两个范围的匹配方式:
|
匹配范围字段彻底在查询范围内的文档。 |
|
匹配范围字段彻底包含查询范围的文档。 |
|
匹配范围字段与查询范围相交的文档。这是查询范围字段时的默认值。 |
Exists Query
返回在原始字段中至少有一个非空值的documents。
GET /_search { "query": { "exists" : { "field" : "user" } } }
没有missing
查询。而是exists
在must_not
子句中使用查询 ,以下所示:
GET /_search { "query": { "bool": { "must_not": { "exists": { "field": "user" } } } } }
Prefix Query
匹配包含具备指定前缀(not analyzed)的术语的字段的文档。
GET /_search { "query": { "prefix" : { "user" : { "value" : "ki", "boost" : 2.0 } } } }
Wildcard Query
查找指定字段包含与指定模式匹配的术语的文档,其中模式支持单字符通配符(?
)和多字符通配符(*
)
GET /_search { "query": { "wildcard" : { "user" : { "wildcard" : "ki*y", "boost" : 2.0 } } } }
Regexp Query
查找指定字段包含与指定的正则表达式匹配的术语的文档 。
GET /_search { "query": { "regexp":{ "name.first":{ "value":"s.*y", "boost":1.2 } } } }
Fuzzy Query
查找指定字段包含与指定术语模糊类似的术语的文档。
GET /_search { "query": { "fuzzy" : { "user" : { "value": "ki", "boost": 1.0, "fuzziness": 2, "prefix_length": 0, "max_expansions": 100 } } } }
参数
|
|
|
不会“模糊化”的初始字符数。这有助于减小必须检查的术语数量。默认为 |
|
|
|
是否支持模糊转置( |
若是prefix_length
设置为0
,则此查询可能很是重,若是 max_expansions
设置为高数字。这可能致使索引中的每一个术语都被检查!
Type Query
查找指定类型的文档。
GET /_search/_search {{ "query": {"query": { "type" : {"type" : { "value" : "_doc""value" : "_doc" }} }} }}
Ids Query
查找具备指定类型和ID的文档。
GET /_search { "query": { "ids" : { "type" : "_doc", "values" : ["1", "4", "100"] } } }