本文参考官方提供api提炼出来的
https://www.elastic.co/guide/en/elasticsearch/reference/current/search.html
Term Level Queries
Term Query
term query查找包含倒排索引中指定的确切term的文档。
GET _search{ "query": { "bool": { "should": [ { "term": { "status": { "value": "urgent", "boost": 2.0 } } }, { "term": { "status": "normal" } } ] } }}
为什么term查询不符合我的文档?
字符串字段可以是类型text
(视为全文,如电子邮件正文),或keyword
(视为确切的值,如电子邮件地址或邮政编码)。确切的值(如数字,日期和关键字)具有在添加到倒排索引的字段中指定的确切值,以便使它们可搜索。
term
查询查找的确切领域的倒排索引项-它不知道该字段的分析什么。这使得在关键字字段或数字或日期字段中查找值非常有用。查询全文字段时,请改用 ,该了解字段的分析方式。
Terms Query
筛选包含与任何提供的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" } } }}
使用将日期舍入到最近的日,月,小时等时,舍入日期取决于范围的结尾是包含还是排除。
向上舍入移动到舍入范围的最后一毫秒,并向下舍入到舍入范围的第一毫秒。例如:
| 大于日期舍入: |
| 大于或等于向下舍入的日期: |
| 小于向下舍入的日期: |
| 小于或等于向上舍入的日期: |
范围查询中的时区
通过在日期值本身中指定时区(如果 接受它),可以将日期从另一个时区转换为UTC ,或者可以将其指定为time_zone
参数:
GET _search{ "query": { "range" : { "timestamp" : { "gte": "2015-01-01 00:00:00", "lte": "now", "time_zone": "+01:00" } } }}
查询范围字段
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"] } }}