【原創】elasticsearch(二)基本增刪改查 -- 轉載請註明出處

一、基本說明

在ES中,文檔歸屬於一種類型(type),而這些類型存在於索引(index)中。文檔,索引,與ES文檔庫的關係可以如下圖所示:

每一條ES中的數據,都是一條json格式的字符串,這些數據不僅包含我們所添加的數據,還包含有一個三個元數據 _index(索引),_type(對象的類),_id(唯一標識主鍵)。

我們在創建ES的數據時,可以不去單獨進行索引與文檔類型的創建操作。只需要在進行添加數據時,說明要存儲的索引與文檔名稱即可,可參見第二部分中的數據新增。

二、數據新增與修改

數據進行新增時,可以使用下方的請求來進行數據新增:

請求方式:PUT

URL:http://192.168.1.199:9200/megacorp/employee/1

Header:Content-Type:application/json

Body:

{
    "first_name" : "John",
    "last_name" :  "Smith",
    "age" :        30,
    "about" :      "I love to go rock climbing",
    "interests": [ "sports", "music" ],
    "birthday": "1989-02-02"
}

說明:

URL:megacorp/employee/1 分別爲 {索引}/{文檔類型}/{id}

Body:具體的數據內容,json格式的字符串信息。

我們可以任意的定義索引與文檔類型以及id,如果索引與文檔類型不存在,ES則會創建出相應的索引與文檔類型,新增到庫中。數據的id,是數據的唯一主鍵,id+索引+文檔類型是全局唯一的。在新增數據時,不可以使其重複,如果出現重複則會將原本的舊數據覆蓋。

如果在新增時,不希望設置主鍵,可以將請求方式修改爲POST請求,並去掉末尾的Id,在新增數據時,ES就會自己生成一個字符串唯一Id。請求方式如下:

請求方式:POST

URL:http://192.168.1.199:9200/megacorp/employee

Header:Content-Type:application/json

Body:

{
    "first_name" : "John",
    "last_name" :  "Smith",
    "age" :        30,
    "about" :      "I love to go rock climbing",
    "interests": [ "sports", "music" ],
    "birthday": "1989-02-02"
}

查詢得出的結果中,Id如下:

7KtG5mgBlW1hvtUzqtXv

三、簡單數據查詢

首先,我們在我們的庫中添加兩條新的數據,Pony Ma和Jack Ma請求如下方所示:

請求方式:PUT

URL:http://192.168.1.199:9200/megacorp/employee/2

Header:Content-Type:application/json

Body:

{
    "first_name": "Jack",
    "last_name": "Ma",
    "age": 30,
    "about": "I regret having founded alibaba",
    "interests": [
      "speech"
    ],
    "birthday": "1989-01-01"
}

請求方式:PUT

URL:http://192.168.1.199:9200/megacorp/employee/3

Header:Content-Type:application/json

Body:

{
    "first_name" : "Pony",
    "last_name" :  "Ma",
    "age" :        29,
    "about" :      "Making money makes you happy",
    "interests": [ "A low profile" ],
    "birthday" : "1990-01-01"
}

在我們將數據新增到了ES中以後,就可以使用GET請求進行單條數據的查詢了。

請求方式:GET

URL:http://192.168.1.199:9200/megacorp/employee/1

說明:megacorp/employee/1 分別爲 {索引}/{文檔類型}/{id}

下方爲響應Body:

{
  "_index": "megacorp",
  "_type": "employee",
  "_id": "1",
  "_version": 5,
  "found": true,
  "_source": {
    "first_name": "John",
    "last_name": "Smith",
    "age": 30,
    "about": "I love to go rock climbing",
    "interests": [
      "sports",
      "music"
    ]
  }
}

在上方的響應中,_source內的內容即爲查詢結果,最初添加到ES中的id爲1的json串數據。如果使用下方URL進行請求,則可以獲取到最早的十條數據,這裏是用_search替代了原本位置的id。

URL:http://192.168.1.199:9200/megacorp/employee/_search

如果我們需要查詢一些特殊的數據時,例如last_name包含有Ma的用戶,則可以使用下方的URL進行查詢。

URL:http://192.168.1.199:9200/megacorp/employee/_search?q=last_name:Ma

如果我們需要的只是部分數據,則可以用以下方式進行請求

URL:http://192.168.1.199:9200/megacorp/employee/_search?_source=age,about

如果只需要_source中的數據不需要其他元數據,可以用下方的方式進行請求

URL:http://192.168.1.199:9200/megacorp/employee/_search?_source

四、數據刪除

刪除數據時,使用DELETE請求進行訪問即可。

請求方式:DELETE

URL:http://192.168.1.199:9200/megacorp/employee/1

如果文檔被找到,Elasticsearch將返回200 OK狀態碼和以下響應體。

{
  "found" :    true,
  "_index" :   "website",
  "_type" :    "blog",
  "_id" :      "123",
  "_version" : 3
}

如果文檔未找到,我們將得到一個404 Not Found狀態碼,響應體是這樣的:

{
  "found" :    false,
  "_index" :   "website",
  "_type" :    "blog",
  "_id" :      "123",
  "_version" : 4
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章