咱們在上一篇 Elasticsearch入門 - 簡單使用,簡單介紹了 document 的CRUD,以及索引管理,還有集羣健康狀態檢查的幾個 API。這些 api 是 Elasticsearch 的基本操做,給咱們本文介紹檢索方式奠基了基礎。api
ES 支持多種多樣的查詢方式,包括一些複雜的高級查詢,好比:查詢結果高亮,排序,過濾數據列等等。咱們先從基礎的查詢介紹。.net
查詢 my_index ,my_type 下的前10條 document。blog
多個參數用 & 分隔開,排序
分頁參數: from(索引匹配結果的開始值) 和 size(搜索結果返回的條數),默認查詢前 10 條數據(from=0,size=10)索引
排序 sort=fieldName:desc sort=fieldName:asc文檔
返回指定列 _source_includes=字段1,字段2get
http://localhost:/my_index/my_type/_search?from=1&size=20&sort=age:asc&_source_includes=age入門
{ // 查詢前 10 條數據 "from": 0, "size": 10, // 查詢username=zgp的數據 "query": { "term": { "username": "zgp" } }, // 排序 "sort": { "age": { "order": "desc" } }, // 不顯示原始數據,固然也能夠顯示指定字段(很少介紹) "_source": false }
3.1 查詢所有文檔
{ "query": { "match_all": {} } }
3.2 查詢結果只包含指定字段
{ "query": { "match_all": {} }, "_source": ["字段1","字段2"] }
3.3 排序
{ "query": { "match_all": {} }, "sort":[ {"price":"desc"} ] }
3.4 全文檢索
跟使用什麼分詞器相關,好比下面的關鍵詞 "username": "zgp zgp456",假設分詞器分詞後的結果是,zgp 和 zgp456,那麼檢索的結果就是username 字段包含 zgp 或者 zgp456 的數據
{ "query": { "match": { "username": "zgp zgp456" } } }
3.5 短語查詢(跟全文檢索相對, 必須徹底匹配)
{ "query": { "match_phrase": { "username": "zgp" } } }
3.6 多字段查詢 (username 和 test 字段都包含 zgp456)
{ "query": { "multi_match": { "query": "zgp456", "fields": ["username", "test"] } } }
本文列舉了經常使用的搜索方式,好比:分頁,排序,指定字段查詢等。es 中還有更高級的玩法,這裏沒辦法所有列舉出來,只有在用的時候本身去探索。另外實踐是檢驗真理的惟一標準,多練習才能發現問題。