小故事
轰隆,躺在床上的陈皮睁开朦胧的双眼,疑惑地皱起眉头,"我这是在哪里?",陈皮心中不禁暗自疑惑。
叮咚,一道熟悉的声音在脑海中响起:恭喜宿主重生。解锁 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
- 启动容器
docker-compose up -d
- 等待 ES 启动完毕后,重置
elastic用户密码
docker exec -it es01 /usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic

4. 重新生成访问 token
docker exec -it es01 /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana
5. 查看 kibana 生成的链接
docker logs kibana

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

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

6. 开始使用 kibana
登录进来后,来到该页面,即可向 ES 发送指令。

添加、修改文档
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": {
}
}
}

删除文档
语法: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。