前言
我們之前已經學過了elasticsearch的簡單操作了。
接下來,灑家要給大家講述一個真實的故事..........
故事一定是要伴隨着趙忠祥老師的聲音作為開始,雨季就要來臨了,又到了動物們發情的季節了......
CURD之C
《知否知否,應是綠肥紅瘦之改編》,編劇:張開
讓我們將鏡頭切換到北宋時期某位官人的府邸,府里男主人是:
PUT zhifou/doc/1
{
"name":"顧老二",
"age":30,
"from": "gu",
"desc": "皮膚黑、武器長、性格直",
"tags": ["黑", "長", "直"]
}
他明處貌似還有倆老婆:
PUT zhifou/doc/2
{
"name":"大娘子",
"age":18,
"from":"sheng",
"desc":"膚白貌美,嬌憨可愛",
"tags":["白", "富","美"]
}
PUT zhifou/doc/3
{
"name":"龍套偏房",
"age":22,
"from":"gu",
"desc":"mmp,沒怎么看,不知道怎么形容",
"tags":["造數據", "真","難"]
}
家里紅旗不倒,家外彩旗飄搖:
PUT zhifou/doc/4
{
"name":"石頭",
"age":29,
"from":"gu",
"desc":"粗中有細,狐假虎威",
"tags":["粗", "大","猛"]
}
PUT zhifou/doc/5
{
"name":"魏行首",
"age":25,
"from":"廣雲台",
"desc":"仿佛兮若輕雲之蔽月,飄飄兮若流風之回雪,mmp,最后竟然沒有嫁給顧老二!",
"tags":["閉月","羞花"]
}
注意:當執行PUT
命令時,如果數據不存在,則新增該條數據,如果數據存在則修改該條數據。
咱們通過GET
命令查詢一下:
GET zhifou/doc/1
結果如下:
{
"_index" : "zhifou",
"_type" : "doc",
"_id" : "1",
"_version" : 1,
"found" : true,
"_source" : {
"name" : "顧老二",
"age" : 30,
"from" : "gu",
"desc" : "皮膚黑、武器長、性格直",
"tags" : [
"黑",
"長",
"直"
]
}
}
查詢也沒啥問題,但是你可能說了,人家老二是黃種人,怎么是黑的呢?好吧咱改改desc
和tags
:
PUT zhifou/doc/1
{
"desc":"皮膚很黃,武器很長,性格很直",
"tags":["很黃","很長", "很直"]
}
上例,我們僅修改了desc
和tags
兩處,而name
、age
和from
三個屬性沒有變化,我們可以忽略不寫嗎?查查看:
GET zhifou/doc/1
結果如下:
{
"_index" : "zhifou",
"_type" : "doc",
"_id" : "1",
"_version" : 3,
"found" : true,
"_source" : {
"desc" : "皮膚很黃,武器很長,性格很直",
"tags" : [
"很黃",
"很長",
"很直"
]
}
}
哎呀,出事故了!修改是修改了,但結果不太理想啊,因為name
、age
和from
屬性都沒啦!
注意:PUT
命令,在做修改操作時,如果未指定其他的屬性,則按照指定的屬性進行修改操作。也就是如上例所示的那樣,我們修改時只修改了desc
和tags
兩個屬性,其他的屬性並沒有一起添加進去。
很明顯,這是病!dai治!怎么治?上車,咱們繼續往下走!
CURD之U
讓我們首先恢復一下事故現場:
PUT zhifou/doc/1
{
"name":"顧老二",
"age":30,
"from": "gu",
"desc": "皮膚黑、武器長、性格直",
"tags": ["黑", "長", "直"]
}
我們要將黑修改成黃:
POST zhifou/doc/1/_update
{
"doc": {
"desc": "皮膚很黃,武器很長,性格很直",
"tags": ["很黃","很長", "很直"]
}
}
上例中,我們使用POST
命令,在id
后面跟_update
,要修改的內容放到doc
文檔(屬性)中即可。
我們再來查詢一次:
GET zhifou/doc/1
結果如下:
{
"_index" : "zhifou",
"_type" : "doc",
"_id" : "1",
"_version" : 5,
"found" : true,
"_source" : {
"name" : "顧老二",
"age" : 30,
"from" : "gu",
"desc" : "皮膚很黃,武器很長,性格很直",
"tags" : [
"很黃",
"很長",
"很直"
]
}
}
結果如上例所示,現在其他的屬性沒有變化,只有desc
和tags
屬性被修改。
注意:POST
命令,這里可用來執行修改操作(還有其他的功能),POST
命令配合_update
完成修改操作,指定修改的內容放到doc
中。
寫了這么多,我也發現我上面有講的不對
的地方——石頭不是跟顧老二不清不楚,石頭是跟小桃不清不楚!好吧,剛才那個數據是一個錯誤示范!我們這就把它干掉!
CURD之D
DELETE zhifou/doc/4
很簡單,通過DELETE
命令,就可以刪除掉那個錯誤示范了!
刪除效果如下:
{
"_index" : "zhifou",
"_type" : "doc",
"_id" : "4",
"_version" : 4,
"result" : "deleted",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 4,
"_primary_term" : 1
}
我們再來查詢一遍:
GET zhifou/doc/4
結果如下:
{
"_index" : "zhifou",
"_type" : "doc",
"_id" : "4",
"found" : false
}
上例中,found:false
表示查詢數據不存在。
CURD之R
我們上面已經不知不覺的使用熟悉這種簡單查詢方式,通過 GET
命令查詢指定文檔:
GET zhifou/doc/1
結果如下:
{
"_index" : "zhifou",
"_type" : "doc",
"_id" : "1",
"_version" : 5,
"found" : true,
"_source" : {
"name" : "顧老二",
"age" : 30,
"from" : "gu",
"desc" : "皮膚很黃,武器很長,性格很直",
"tags" : [
"很黃",
"很長",
"很直"
]
}
}
查詢沒那么簡單,預知后事如何,請聽下回分解:復雜查詢
that's all