增刪改查是數據庫的基礎操做方法。ES 雖然不是數據庫,可是不少場合下,都被 人們當作一個文檔型 NoSQL 數據庫在使用,緣由天然是由於在接口和分佈式架構 層面的類似性。雖然在 Elastic Stack 場景下,數據的寫入和查詢,分別由 Logstash 和 Kibana 代勞,做爲測試、調研和排錯時的基本功,仍是須要了解一下 ES 的增刪改查用法的。node
向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數據
增-數據寫入:
bash
使用Postman工具 架構
使用curl命令。
curl
curl -X POST \ http://10.100.172.111:9200/test-2017.08.28/testlog/ \ -d '{ "date" : "2017-07-28", "user" : "xiaoke", "mesg" : "這是第一條數據." }'
返回結果以下jvm
{ "_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)ide
_type 至關於數據庫中的表()工具
_id 就是id(能夠本身指定也以自增,插入數據的惟一ID,刪除和更新單條數據,都須要用到此ID)測試
查-數據獲取
能夠看到,在數據寫入的時候,會返回該數據的 _id 。這就是後續用來獲取數據 的關鍵:
使用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的內容,而後作了修改在次查詢。