elasticsearch的增删改查
????增刪改查是數(shù)據(jù)庫的基礎(chǔ)操作方法。ES 雖然不是數(shù)據(jù)庫,但是很多場合下,都被 人們當做一個文檔型 NoSQL 數(shù)據(jù)庫在使用,原因自然是因為在接口和分布式架構(gòu) 層面的相似性。雖然在 Elastic Stack 場景下,數(shù)據(jù)的寫入和查詢,分別由 Logstash 和 Kibana 代勞,作為測試、調(diào)研和排錯時的基本功,還是需要了解一下 ES 的增刪改查用法的。
基于HTTP協(xié)議,以JSON為數(shù)據(jù)交互格式的RESTful API
向Elasticsearch發(fā)出的請求的組成部分與其它普通的HTTP請求是一樣的:
curl?-X<VERB>?'<PROTOCOL>://<HOST>:<PORT>/<PATH>?<QUERY_STRING>'?-d?'<BODY>' #VERB?HTTP方法:GET,?POST,?PUT,?HEAD,?DELETE #PROTOCOL?http或者https協(xié)議(只有在Elasticsearch前面有https代理的時候可用) #HOST?Elasticsearch集群中的任何一個節(jié)點的主機名,如果是在本地的節(jié)點,那么就叫l(wèi)ocalhost #PORT?Elasticsearch?HTTP服務(wù)所在的端口,默認為9200 #PATH?API路徑(例如_count將返回集群中文檔的數(shù)量),PATH可以包含多個組件,例如_cluster/stats或者_nodes/stats/jvm #QUERY_STRING?一些可選的查詢請求參數(shù),例如?pretty參數(shù)將使請求返回更加美觀易讀的JSON數(shù)據(jù)增-數(shù)據(jù)寫入:
????使用Postman工具? ?
????使用curl命令。
??????
curl?-X?POST?\http://10.100.172.111:9200/test-2017.08.28/testlog/?\-d?'{ "date"?:?"2017-07-28", "user"?:?"xiaoke", "mesg"?:?"這是第一條數(shù)據(jù)." }'返回結(jié)果如下
{"_index":?"test-2017.08.28","_type":?"testlog","_id":?"AV2H9ikTjAqppDoQq45o","_version":?1,"result":?"created","_shards":?{"total":?2,"successful":?2,"failed":?0},"created":?true }這個返回值意味著我們的索引請求已經(jīng)被成功創(chuàng)建,其中還包含了_index, _type以及_id的元數(shù)據(jù),以及一個新的元素_version
_index ES集群中的索引名稱(相當于MYSQL中的database)
_type 相當于數(shù)據(jù)庫中的表()
_id 就是id(可以自己指定也以自增,插入數(shù)據(jù)的唯一ID,刪除和更新單條數(shù)據(jù),都需要用到此ID)
查-數(shù)據(jù)獲取
????可以看到,在數(shù)據(jù)寫入的時候,會返回該數(shù)據(jù)的 _id 。這就是后續(xù)用來獲取數(shù)據(jù) 的關(guān)鍵:
????使用CURL方式
curl?-XGET?http://10.100.172.111:9200/test-2017.08.28/testlog/AV2IIkPKjAqppDoQrA7n?pretty????返回結(jié)果
{"_index"?:?"test-2017.08.28","_type"?:?"testlog","_id"?:?"AV2IIkPKjAqppDoQrA7n","_version"?:?1,"found"?:?true,"_source"?:?{"date"?:?"2017-07-28","user"?:?"xiaoke","mesg"?:?"這是第一條數(shù)據(jù)."} }這個 _source 里的內(nèi)容,正是之前寫入的數(shù)據(jù)。可以使用_source只獲取源數(shù)據(jù)部分
刪-數(shù)據(jù)刪除
????要刪除數(shù)據(jù),修改發(fā)送的 HTTP 請求方法為 DELETE 即可:
?curl?-XDELETE?http://10.100.172.111:9200/test-2017.08.28/testlog/AV2H9ikTjAqppDoQq45o?pretty? ? 返回結(jié)果如下
{"found"?:?true,"_index"?:?"test-2017.08.28","_type"?:?"testlog","_id"?:?"AV2H9ikTjAqppDoQq45o","_version"?:?2,"result"?:?"deleted","_shards"?:?{"total"?:?2,"successful"?:?2,"failed"?:?0} }刪除不單針對單條數(shù)據(jù),還可以刪除整個整個索引。甚至可以用通配符。
改-數(shù)據(jù)更新
????已經(jīng)寫過的數(shù)據(jù),同樣還是可以修改的。有兩種辦法,一種是全量提交,即指明
_id 再發(fā)送一次寫入請求。
????
[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"?:?"這是第一條數(shù)據(jù)."} } [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條數(shù)據(jù)."? >?}' {"_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條數(shù)據(jù)."} }????可以看到,我先查詢了一下_id為AV2IIkPKjAqppDoQrA7n的內(nèi)容,然后做了修改在次查詢。
轉(zhuǎn)載于:https://blog.51cto.com/kexiaoke/1951752
總結(jié)
以上是生活随笔為你收集整理的elasticsearch的增删改查的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 初探面向对象编程之oop与设计模式
- 下一篇: docker对aufs触发的bug