elasticsearch的CURD


前言

我們之前已經學過了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" : [
      "黑",
      "長",
      "直"
    ]
  }
}

查詢也沒啥問題,但是你可能說了,人家老二是黃種人,怎么是黑的呢?好吧咱改改desctags

PUT zhifou/doc/1
{
  "desc":"皮膚很黃,武器很長,性格很直",
  "tags":["很黃","很長", "很直"]
}

上例,我們僅修改了desctags兩處,而nameagefrom三個屬性沒有變化,我們可以忽略不寫嗎?查查看:

GET zhifou/doc/1

結果如下:

{
  "_index" : "zhifou",
  "_type" : "doc",
  "_id" : "1",
  "_version" : 3,
  "found" : true,
  "_source" : {
    "desc" : "皮膚很黃,武器很長,性格很直",
    "tags" : [
      "很黃",
      "很長",
      "很直"
    ]
  }
}

哎呀,出事故了!修改是修改了,但結果不太理想啊,因為nameagefrom屬性都沒啦!
注意:PUT命令,在做修改操作時,如果未指定其他的屬性,則按照指定的屬性進行修改操作。也就是如上例所示的那樣,我們修改時只修改了desctags兩個屬性,其他的屬性並沒有一起添加進去。

很明顯,這是病!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" : [
      "很黃",
      "很長",
      "很直"
    ]
  }
}

結果如上例所示,現在其他的屬性沒有變化,只有desctags屬性被修改。

注意: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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM