重生之我们在ES顶端相遇第2章-救命,系统要教我的CURD

373 阅读5分钟

小故事

轰隆,躺在床上的陈皮睁开朦胧的双眼,疑惑地皱起眉头,"我这是在哪里?",陈皮心中不禁暗自疑惑。
叮咚,一道熟悉的声音在脑海中响起:恭喜宿主重生。解锁 ES 系统。
颁发宿主终极任务:帮助家族崛起
颁发宿主第一阶段任务:学会如何使用 ES 系统
请宿主掌握如何使用 ES 系统,为帮助家族崛起做好准备。
"难道我真的重生了?还要帮助家族崛起?这是什么情况!",陈皮百思不得其解,心中充满了疑虑和好奇。
陈皮唤起 ES 系统,查看了当前的任务 -- 学会 ES CURD
"老爷,老爷,少爷活过来了!",一名丫鬟看到在屋内走动的陈皮,高兴的大喊。
闻讯赶来的老爷急忙走进房间,欣喜地看着自己心爱的儿子,忍不住伸手摸了摸他的脸颊,"哎哟,我的心肝宝贝。这几天你一直都昏睡在床,可把你爹我难受死了"。
"我这几天干啥了,怎么一直昏睡,我一点记忆都没了"陈皮疑惑地询问道。
老爷叹了口气,"还不是你小子到处鬼混,去了一趟青楼,人就成这样了",说着眼泪哗啦啦地流了下来。
"看来这具身体的主人也是个不务正业的家伙。牡丹花下死,做鬼也风流",陈皮在心里默默地想着。
"你现在好好休息,我让丫鬟给你准备点大补之物。金环,你去给少爷准备点滋补的东西。",老爷嘱咐着。
"家族还有其他事情需要我去处理。儿子你好好休息,为父就先走了",陈平道
"爹爹,您慢走。"陈皮微微颔首,目送老爷离开。
过了一会儿,金环端着一碗大补汤走了进来。
"金环,我这几天昏睡好像把以前的事情都忘记了。咱家族现在是什么情况",陈皮疑惑道。
陈皮认真地倾听着金环的描述,了解到家族的衣服生意正面临着严峻的挑战。他暗自下定决心,"看来要完成系统的终极任务,得先帮助父亲优化染色工艺了。"
"系统,你有什么方案可以优化染色工艺吗?"陈皮询问道。
"系统有染色工艺,不过需要宿主先完成当前任务,系统才能开启其他的功能供宿主使用。"

未完待续...

前置-单机版 ES 搭建

上一篇,我们介绍了 ES8 集群搭建。实际学习的时候,用单机就行。 下面介绍如何用 docker-compose 搭建单机版 ES。

1. 创建 docker-compose.yml

version: "2.2"
services:
  es01:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.0.1
    container_name: "es01"
    ports:
      - 9200:9200
      - 9300:9300
    environment:
      - "ES_JAVA_OPTS=-Xms1g -Xmx1g"
  kibana:
    image: docker.elastic.co/kibana/kibana:8.0.1
    container_name: "kibana"
    ports:
      - 5601:5601
  1. 启动容器
docker-compose up -d
  1. 等待 ES 启动完毕后,重置 elastic 用户密码
docker exec -it es01 /usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic

1.jpg

2.jpg 4. 重新生成访问 token

docker exec -it es01 /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana

3.jpg 5. 查看 kibana 生成的链接

docker logs kibana

4.jpg

6. 访问 kibana

使用浏览器访问 kibana 生成的链接。 输入之前生成的 token。

5.jpg

最后,输入我们刚才重置的 elastic 用户的密码。

6.jpg

6. 开始使用 kibana

登录进来后,来到该页面,即可向 ES 发送指令。

7.jpg

添加、修改文档

ES 添加文档有以下 2 种方式。记住第2种即可,常用且方便

1. POST /<index>/_doc/
2. PUT /<index>/_doc/<_id>

  • index: 索引名称,类似数据库
  • _doc: 固定写死,索引的 type,类似数据库的表
  • _id: 文档 ID

POST /<index>/_doc/

POST /test/_doc
{
  "name""Elasticsearch"
}

返回如下:

{
  "_index" : "test",
  "_id" : "dc_bFpABApk5lDcSNmmN",
  "_version" : 1,
  "result" : "created",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 0,
  "_primary_term" : 1
}
  • _id: 表示文档 ID

该操作,ES 会自动生成文档的ID。

PUT /<index>/_doc/<_id>

PUT API 可以添加、修改数据。存在指定ID 文档时修改,反之新增。

PUT /test/_doc/1
{
  "name""Elasticsearch 8.0"
}

返回如下:

{
  "_index" : "test",
  "_id" : "1",
  "_version" : 1,
  "result" : "created",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 1,
  "_primary_term" : 1
}

result: "created" 表明该操作为新增文档。
写入的时候指定了 ID,因此该文档的ID 为 1

再来看个 update 的例子

PUT /test/_doc/1
{
  "name""Hello welcome to Elasticsearch 8.0!"
}

返回如下:

{
  "_index" : "test",
  "_id" : "1",
  "_version" : 2,
  "result" : "updated",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 2,
  "_primary_term" : 1
}

result: "update", 表明该操作为更新文档。

查询文档

来查询下,我们刚才写入的文档

GET /test/_search
{
  "query": {
    "match_all": {
    }
  }  
}

9.jpg

删除文档

语法:DELETE /<index>/_doc/<_id>

DELETE /test/_doc/1

返回如下:

{
  "_index" : "test",
  "_id" : "1",
  "_version" : 3,
  "result" : "deleted",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 3,
  "_primary_term" : 1
}

批量操作

bulk api 可以批量提交不同的操作


POST _bulk

{ "index": { "_index": "test", "_id": "2" } }

{ "name": "elasticsearch4"}

{ "index": { "_index": "test", "_id": "3" } }

{ "name": "elasticsearch5"}

{"update": {"_index": "test", "_id": "1"}}

{"doc": {"name": "elasticsearch6"}}

{"delete": {"_index": "test", "_id":2}}

  • index: 不存在则写入,存在则更新,不过需要注意的是,如果你指定了一个已存在的文档 ID,index 操作将替换该文档的内容,新的文档将完全覆盖旧的文档。

  • update: 部分更新,仅更新声明的字段内容

  • delete: 删除文档

总结

OK,简单的 CURD 就介绍完了。后面会慢慢展开更多的知识点,也会越来越深入讲解 ES。 总之各位看官不要着急,本系列文章的定位就是 由浅入深,系统的讲解 ES。