參考官方文檔:https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-query-string-query.html
1.例子
{
"query_string":{
"default_field":"name",
"query":"(this AND that) OR thu*"
}
2. 參數
這里只挑幾個常用的參數說一下,其他的一般默認就夠了
- query: 需要查詢的具體內容
- default_field: 查詢的字段
默認是_all,即對所有字段進行查詢。
支持多字段——"fields" : ["age", "name"],fields中只要有一個字段滿足query的條件即可匹配查詢。
支持一些簡單的wildcard寫法。比如fields:[“nam*”]即任何nam開頭的字段,注意:如果field與query寫在一起比如”query”:”name:obama”,要使用wildcard需要轉義--->”query”:”nam\\*:obama”
當fields有多個的時候,會有另外一個參數:
use_dis_max: true代表使用dis_max查詢,false為bool查詢
至於use_dis_max的用法:請參考http://blog.csdn.NET/dm_vincent/article/details/41820537
- default_operator:默認運算符
有AND、OR,默認為OR。比如query里面的內容是”cat dog”,兩個短語以空格分開,如果default_operator參數為OR,那么只要字段內包含cat或者dog之一就可以匹配。
如果default_operator為AND,字段內必須同時包含cat和dog才可以匹配。與bool查詢挺像的。
- analyzer:分析器
用於分析query內容的分析器。
這里需要注意的是query_string查詢,query的內容會經過分析。其他的查詢比如match查詢也是會分析的,term查詢會分析。打個比方:
PUT /animal { "name": “DOG”}
因為分析器的原因,進行index的時候DOG會自動變成小寫的dog.query_string與match查詢因為查詢的內容也會被分析,所以查詢DOG時會自動判斷為查詢dog。而term查詢不然,你查詢DOG,
那么Elasticsearch就會去索引里 找DOG,很顯然索引里只有小寫的dog,你是無法查詢成功的。
- minimum_should_match: 最小匹配詞條
比如query:”cat dog mouse”,這個配置項為2,那么只有字段里至少同時包含這三個中的任意兩個才會匹配。需要注意的是,這個配置項只對default_operator為OR的時候生效。如果這個是AND,
那么cat dog mouse必須全部包含無論minimum_should_match為多少。
3.語法
常見寫法:
{“query”:{“query_string”:{“name:obama”}}}
name字段為obama
{“query”:{“query_string”:{“nam\\*:obama”}}}
存在一個nam開頭的字段,值為obama
{“query”:{“query_string”:{“__missing__:name”}}}
name字段值為null的文檔
{“query”:{“query_string”:{“__exists__:name”}}}
name字段值不為null的文檔
{“query”:{“query_string”:{“name:(obama OR xidada)”}}}
name字段為Obama或者xidada的文檔
注意這里!一定不要把這里的OR、AND與前面的混淆,minimum_should_match更需要注意運算符。如果這里全是OR,那么你可以用minimum_should_match,如果混用AND OR 一定不要用這個參數。如果一定要用請把AND連接的用()括起來。
另外a OR b OR c.minimum_should_match為3代表 需要包含a b c三個。如果你用括號括起來(a OR b) OR c 那么括號內的將不是兩個條件而是一個整體的條件,minimum_should_match為2 即代表需要同時包含a b c三個。
Wildcards
query的內容中支持?與*。?可以代替一個任意字符、 *可代表任意個字符(包括零個)。比如你要查詢的內容很長,記不清了但是你記得末尾是tor,那么你只需要把query內容寫成*tor即可
正則
如果要在query的內容中使用正則表達式,在兩端加上正斜杠/即可。比如name:/ob[am]{2}a/
支持的正則語法見:
模糊查詢
這個是一個很實用的功能。你想搜obama可是你記不清了或者你錯打成了obalv。沒事,只要你在查詢的時候加個~就不用擔心了: “query”:”name:obalv~”,你會驚喜的發現仍然可以搜到obama。
另外你可以在~后面加個數字來指定允許錯誤幾個字母。默認以及最大都是2。比如你寫成“query”:”name:obalv~1”,就只能允許一個錯誤,而你查詢的內容錯了兩個字母,就無法搜到obama了。
range范圍查詢
具體語法為:[min TO max] 閉區間。{min TO max}開區間。不允許左閉右開!左開右閉!
date:[2012-01-01 TO 2012-12-31]
count:[1 TO 5]
count:[10 TO *]
age:>10
age:<=10
布爾運算符
原文地址:http://blog.csdn.net/u014587343/article/details/50538394