1. 程式人生 > 其它 >【Elasticsearch】Query DSL

【Elasticsearch】Query DSL

技術標籤:程式園

Elasticsearch提供了基於JSON的完整查詢DSL(特定於域的語言)來定義查詢。將查詢DSL視為查詢的AST(抽象語法樹),它由兩種子句組成:

  • Leaf query Cluase 葉子查詢(簡單查詢):這種查詢可以單獨使用,針對指定的欄位查詢指定的值。
  • Compound query clauses 複雜查詢:複雜查詢可以包含葉子或者其它的複雜查詢語句,用於組合成複雜的查詢語句,比如not, bool等。

查詢雖然包含這兩種,但是查詢的行為還與查詢的執行環境有關,不同的執行環境,查詢操作也不一樣。
查詢的行為取決於他們所在的查詢上下文,包括Query查詢上下文和Filter查詢上下文。

我們在使用ElasticSearch的時候,避免不了使用DSL語句去查詢,就像使用關係型資料庫的時候要學會SQL語法一樣。如果我們學習好了DSL語法的使用,那麼在日後使用和使用Java Client呼叫時候也會變得非常簡單。

本人在自己的電腦搭建了單機的ES:http://127.0.0.1:9200/,版本是ES6.1.1。

檢視所有索引

GET http://127.0.0.1:9200/_cat/indices?v

建立索引

PUT http://127.0.0.1:9200/commodity?pretty

其中commodity為索引名稱,預設情況下,建立的索引分片數量是 5 個,副本數量是 1 個。

在任意的查詢字串中增加pretty引數,會讓Elasticsearch美化輸出(pretty-print)JSON響應以便更加容易閱讀。

可以在建立索引的時候通過如下引數來指定分片數、副本數量:

{
    "settings":{
        "number_of_shards":3,
        "number_of_replicas":2
    }
}

檢視索引的欄位型別(mapping)

GET http://127.0.0.1:9200/commodity?_mapping

建立對映(mapping)

PUT http://127.0.0.1:9200/commodity/userinfo/_mapping

其中userinfo相當於關聯資料庫中的表名, mapping就是欄位型別

請求引數如下:

{
    "properties":{
        "name":{
            "type":"text",
            "store":false
        },
        "city":{
            "type":"text",
            "store":false
        },
        "age":{
            "type":"long",
            "store":false
        },
        "description":{
            "type":"text",
            "store":false
        }
    }
}

刪除索引

DELETE http://127.0.0.1:9200/commodity

新增文件資料

PUT http://127.0.0.1:9200/commodity/userinfo/1

新增id=1的資料:

{
  "name":"李四",
  "age":22,
  "city":"深圳",
  "description":"李四來自湖北武漢!"
}

更新文件資料

(1) 覆蓋原來資料

PUT http://127.0.0.1:9200/commodity/userinfo/1
{
  "name":"張三丰",
  "description":"在武漢讀書,家在武漢!在深圳工作!"
}

(2) 不會覆蓋原來資料,只會更新某個域的資料

POST http://127.0.0.1:9200/commodity/userinfo/1/_update
{
  "doc":{
    "name":"張三丰",
    "description":"在武漢讀書,家在武漢!在深圳工作!"
  }
}

刪除文件資料

(1) 根據ID刪除資料

DELETE http://127.0.0.1:9200/commodity/userinfo/1

查詢資料

(1) 根據id查詢資料

GET http://127.0.0.1:9200/commodity/userinfo/1