Elasticsearch入門 - 多種搜索方式

開篇

咱們在上一篇 Elasticsearch入門 - 簡單使用,簡單介紹了 document 的CRUD,以及索引管理,還有集羣健康狀態檢查的幾個 API。這些 api 是 Elasticsearch 的基本操做,給咱們本文介紹檢索方式奠基了基礎。api

搜索方式

ES 支持多種多樣的查詢方式,包括一些複雜的高級查詢,好比:查詢結果高亮,排序,過濾數據列等等。咱們先從基礎的查詢介紹。.net

1. URL 參數查詢

GET http://localhost:9200/my_index/my_type/_search?c參數code

查詢 my_index ,my_type 下的前10條 document。blog

  • 多個參數用 & 分隔開,排序

  • 分頁參數: from(索引匹配結果的開始值) 和 size(搜索結果返回的條數),默認查詢前 10 條數據(from=0,size=10)索引

  • 排序 sort=fieldName:desc sort=fieldName:asc文檔

  • 返回指定列 _source_includes=字段1,字段2get

完整示例(指定分頁參數 + 按年齡字段升序排序,只返回 age 數據)

http://localhost:/my_index/my_type/_search?from=1&size=20&sort=age:asc&_source_includes=age入門

2. POST 方式查詢

POST http://localhost:9200/my_index/my_type/_searchast

{
    // 查詢前 10 條數據
    "from": 0,
    "size": 10,
    // 查詢username=zgp的數據
    "query": {
        "term": {
            "username": "zgp"
        }
    },
    // 排序
    "sort": {
        "age": {
            "order": "desc"
        }
    },
    // 不顯示原始數據,固然也能夠顯示指定字段(很少介紹)
    "_source": false
}

3. DSL 查詢

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 中還有更高級的玩法,這裏沒辦法所有列舉出來,只有在用的時候本身去探索。另外實踐是檢驗真理的惟一標準,多練習才能發現問題。

相關文章
相關標籤/搜索