【ES】學習3-請求體查詢
阿新 • • 發佈:2017-06-04
ext 組合 https 傳遞 guide should 學習 text class
1.空查詢
GET /index_2014*/type1,type2/_search
{}
GET /_search { "from": 30, "size": 10 }
2.查詢表達式
DSL只需將查詢語句傳遞給 query
參數
GET /_search { "query": YOUR_QUERY_HERE }
查詢全部 match_all 跟空查詢等價
GET /_search { "query": { "match_all": {} } }
針對某個字段,結構
{ QUERY_NAME: { FIELD_NAME: { ARGUMENT: VALUE, ARGUMENT: VALUE,... } } }
GET /_search { "query": { "match": { "tweet": "elasticsearch" } } }
3.查詢與過濾
查詢:一個評分的匹配,計算相似度
過濾:一個不評分的匹配,只有是或否。過濾的性能更好。
4.重要字段
match_all:匹配所有
{ "match_all": {}}
match:全文匹配或精確匹配
{ "match": { "tweet": "About Search" }} { "match": { "age": 26 }} {"match": { "date": "2014-09-01" }} { "match": { "public": true }} { "match": { "tag": "full_text" }}
multi_match:在多個字段上執行相同的match查詢
{ "multi_match": { "query": "full text search", "fields": [ "title", "body" ] } }
range:找出那些落在指定區間內的數字或者時間
{ "range": {"age": { "gte": 20, "lt": 30 } } }
term:用於精確值 匹配,這些精確值可能是數字、時間、布爾或者那些not_analyzed
的字符串
{ "term": { "age": 26 }} { "term": { "date": "2014-09-01" }} { "term": { "public": true }} { "term": { "tag": "full_text" }}
terms:和 term
查詢一樣,但它允許你指定多值進行匹配。如果這個字段包含了指定值中的任何一個值,那麽這個文檔滿足條件
{ "terms": { "tag": [ "search", "full_text", "nosql" ] }}
exists:查找指定字段中有值的文檔
{ "exists": { "field": "title" } }
missing:查找指定字段中無值的文檔
5.組合多查詢
bool:將多查詢組合在一起。它支持參數:
must:
文檔 必須 匹配這些條件才能被包含進來。
must_not:
文檔 必須不 匹配這些條件才能被包含進來。
should:
如果滿足這些語句中的任意語句,將增加 _score
,否則,無任何影響。它們主要用於修正每個文檔的相關性得分。
filter:
必須 匹配,但它以不評分、過濾模式來進行。這些語句對評分沒有貢獻,只是根據過濾標準來排除或包含文檔。
{ "bool": { "must": { "match": { "title": "how to make millions" }}, "must_not": { "match": { "tag": "spam" }}, "should": [ { "match": { "tag": "starred" }} ], "filter": { "range": { "date": { "gte": "2014-01-01" }} } } }
{ "bool": { "must": { "match": { "title": "how to make millions" }}, "must_not": { "match": { "tag": "spam" }}, "should": [ { "match": { "tag": "starred" }} ], "filter": { "bool": { "must": [ { "range": { "date": { "gte": "2014-01-01" }}}, { "range": { "price": { "lte": 29.99 }}} ], "must_not": [ { "term": { "category": "ebooks" }} ] } } } }
constant_score查詢:
它將一個不變的常量評分應用於所有匹配的文檔。它被經常用於你只需要執行一個 filter 而沒有其它查詢(例如,評分查詢)的情況下。可以使用它來取代只有 filter 語句的 bool
查詢。
{ "constant_score": { "filter": { "term": { "category": "ebooks" } } } }
6. 驗證查詢
_validate, explain:判斷查詢是否合法以及原因。
GET /gb/tweet/_validate/query?explain { "query": { "tweet" : { "match" : "really powerful" } } }
【ES】學習3-請求體查詢