1-Elasticsearch - ES的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
posted @ 2019-03-22 09:54  听雨危楼  阅读(1907)  评论(0编辑  收藏  举报