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工具? ?
????使用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 。這就是后續用來獲取數據 的關鍵:
????使用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的內容,然后做了修改在次查詢。
轉載于:https://blog.51cto.com/kexiaoke/1951752
總結
以上是生活随笔為你收集整理的elasticsearch的增删改查的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 初探面向对象编程之oop与设计模式
- 下一篇: docker对aufs触发的bug