elasticsearch的增刪改查

    增刪改查是數據庫的基礎操作方法。ES 雖然不是數據庫,但是很多場合下,都被 人們當做一個文檔型 NoSQL 數據庫在使用,原因自然是因爲在接口和分佈式架構 層面的相似性。雖然在 Elastic Stack 場景下,數據的寫入和查詢,分別由 Logstash 和 Kibana 代勞,作爲測試、調研和排錯時的基本功,還是需要了解一下 ES 的增刪改查用法的。

基於HTTP協議,以JSON爲數據交互格式的RESTful API

向Elasticsearch發出的請求的組成部分與其它普通的HTTP請求是一樣的:

curl -X<VERB> '<PROTOCOL>://<HOST>:<PORT>/<PATH>?<QUERY_STRING>' -d '<BODY>'
#VERB HTTP方法:GET, POST, PUT, HEAD, DELETE
#PROTOCOL http或者https協議(只有在Elasticsearch前面有https代理的時候可用)
#HOST Elasticsearch集羣中的任何一個節點的主機名,如果是在本地的節點,那麼就叫localhost
#PORT Elasticsearch HTTP服務所在的端口,默認爲9200
#PATH API路徑(例如_count將返回集羣中文檔的數量),PATH可以包含多個組件,例如_cluster/stats或者_nodes/stats/jvm
#QUERY_STRING 一些可選的查詢請求參數,例如?pretty參數將使請求返回更加美觀易讀的JSON數據

增-數據寫入:

    使用Postman工具   

wKiom1l620XzClvPAACWlxabZwY270.png-wh_50

    使用curl命令。

      

curl -X POST \
  http://10.100.172.111:9200/test-2017.08.28/testlog/ \
  -d '{
"date" : "2017-07-28",
"user" : "xiaoke",
"mesg" : "這是第一條數據."
}'

返回結果如下

{
    "_index": "test-2017.08.28",
    "_type": "testlog",
    "_id": "AV2H9ikTjAqppDoQq45o",
    "_version": 1,
    "result": "created",
    "_shards": {
        "total": 2,
        "successful": 2,
        "failed": 0
    },
    "created": true
}

這個返回值意味着我們的索引請求已經被成功創建,其中還包含了_index, _type以及_id的元數據,以及一個新的元素_version

_index ES集羣中的索引名稱(相當於MYSQL中的database)

_type 相當於數據庫中的表()

_id 就是id(可以自己指定也以自增,插入數據的唯一ID,刪除和更新單條數據,都需要用到此ID)

查-數據獲取

    可以看到,在數據寫入的時候,會返回該數據的 _id 。這就是後續用來獲取數據 的關鍵:

wKiom1l65jWxQEf-AADnfZfm-Lk054.png-wh_50

    使用CURL方式

curl -XGET http://10.100.172.111:9200/test-2017.08.28/testlog/AV2IIkPKjAqppDoQrA7n?pretty

    返回結果

{
  "_index" : "test-2017.08.28",
  "_type" : "testlog",
  "_id" : "AV2IIkPKjAqppDoQrA7n",
  "_version" : 1,
  "found" : true,
  "_source" : {
    "date" : "2017-07-28",
    "user" : "xiaoke",
    "mesg" : "這是第一條數據."
  }
}

這個 _source 裏的內容,正是之前寫入的數據。可以使用_source只獲取源數據部分

刪-數據刪除

    要刪除數據,修改發送的 HTTP 請求方法爲 DELETE 即可:

 curl -XDELETE http://10.100.172.111:9200/test-2017.08.28/testlog/AV2H9ikTjAqppDoQq45o?pretty

    返回結果如下

{
  "found" : true,
  "_index" : "test-2017.08.28",
  "_type" : "testlog",
  "_id" : "AV2H9ikTjAqppDoQq45o",
  "_version" : 2,
  "result" : "deleted",
  "_shards" : {
    "total" : 2,
    "successful" : 2,
    "failed" : 0
  }
}

刪除不單針對單條數據,還可以刪除整個整個索引。甚至可以用通配符。

改-數據更新

    已經寫過的數據,同樣還是可以修改的。有兩種辦法,一種是全量提交,即指明

_id 再發送一次寫入請求。

    

[root@inte-es-node1 tmp]# curl -XGET http://10.100.172.111:9200/test-2017.08.28/testlog/AV2IIkPKjAqppDoQrA7n?pretty
{
  "_index" : "test-2017.08.28",
  "_type" : "testlog",
  "_id" : "AV2IIkPKjAqppDoQrA7n",
  "_version" : 1,
  "found" : true,
  "_source" : {
    "date" : "2017-07-28",
    "user" : "xiaoke",
    "mesg" : "這是第一條數據."
  }
}
[root@inte-es-node1 tmp]# curl -X POST http://10.100.172.111:9200/test-2017.08.28/testlog/AV2IIkPKjAqppDoQrA7n/ \
>  -d '{
> "date" : "2017-07-28",
> "user" : "xiaoke",
> "mesg" : "這是第2條數據." 
> }'
{"_index":"test-2017.08.28","_type":"testlog","_id":"AV2IIkPKjAqppDoQrA7n","_version":2,"result":"updated","_shards":{"total":2,"successful":2,"failed":0},"created":false}[root@inte-es-node1 tmp]# 
[root@inte-es-node1 tmp]# curl -XGET http://10.100.172.111:9200/test-2017.08.28/testlog/AV2IIkPKjAqppDoQrA7n?pretty
{
  "_index" : "test-2017.08.28",
  "_type" : "testlog",
  "_id" : "AV2IIkPKjAqppDoQrA7n",
  "_version" : 2,
  "found" : true,
  "_source" : {
    "date" : "2017-07-28",
    "user" : "xiaoke",
    "mesg" : "這是第2條數據."
  }
}


    可以看到,我先查詢了一下_id爲AV2IIkPKjAqppDoQrA7n的內容,然後做了修改在次查詢。



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