本文參考官方提供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"] } } }