term、terms查詢
term query會去倒排索引中尋找確切的term,它並不知道分詞器的存在,這種查詢適合keyword、numeric、date等明確值的
term:查詢某個字段里含有某個關鍵詞的文檔
GET /customer/doc/_search/ { "query": { "term": { "title": "blog" } } }
terms:查詢某個字段里含有多個關鍵詞的文檔
GET /customer/doc/_search/ { "query": { "terms": { "title": [ "blog","first"] } } }
match查詢
match query 知道分詞器的存在,會對field進行分詞操作,然后再查詢
GET /customer/doc/_search/ { "query": { "match": { "title": "my ss" #它和term區別可以理解為term是精確查詢,這邊match模糊查詢;match會對my ss分詞為兩個單詞,然后term對認為這是一個單詞 } } }
match_all:查詢所有文檔
GET /customer/doc/_search/ { "query": { "match_all": {} } }
multi_match:可以指定多個字段
GET /customer/doc/_search/ { "query": { "multi_match": { "query" : "blog", "fields": ["name","title"] #只要里面一個字段包含值 blog 既可以 } } }
match_phrase:短語匹配查詢
ES引擎首先分析查詢字符串,從分析后的文本中構建短語查詢,這意味着必須匹配短語中的所有分詞,並且保證各個分詞的相對位置不變
_source:當我們希望返回結果只是一部分字段時,可以加上_source
GET /customer/doc/_search/ { "_source":["title"], #只返回title字段 "query": { "match_all": {} } }
排序
使用sort實現排序(類似sql):desc 降序,asc升序
fuzzy實現模糊查詢
value:查詢的關鍵字
boost:查詢的權值,默認值是1.0
min_similarity:設置匹配的最小相似度,默認值0.5,對於字符串,取值0-1(包括0和1);對於數值,取值可能大於1;對於日期取值為1d,1m等,1d等於1天
prefix_length:指明區分詞項的共同前綴長度,默認是0
GET /customer/doc/_search/ { "query": { "fuzzy": { "name": { "value": "blg" } } } } #返回: { "took": 8, "timed_out": false, "_shards": { "total": 5, "successful": 5, "skipped": 0, "failed": 0 }, "hits": { "total": 1, "max_score": 0.19178805, "hits": [ { "_index": "customer", "_type": "doc", "_id": "1", "_score": 0.19178805, "_source": { "name": "blog", "tags": [ "testing" ], "title": "i am a doc" } } ] } }