义乌便宜自适应网站建设厂家产品软文案例
简介:Elasticsearch(ES)是一个开源的分布式搜索和分析引擎,用于快速存储、搜索和分析大量数据。它具有高性能、可扩展性和灵活性的特点,被广泛用于构建实时搜索、日志分析、数据可视化等应用。
本文主要介绍ES索引的操作,索引中数据的操作,增、删、改功能。
一、环境准备
版本
Docker version 20.10.22
elasticsearch:7.13.3
kibana:7.13.3
ps:具体启动命令参考第一篇ES博客
二、创建索引
创建索引
创建索引,my_test_index,分别有四个字段id、name、age、remark
PUT:代表请求方式为 put 类型
my_test_index:代表索引的名称
number_of_shards:分片数
number_of_replicas:副本数
正如上述所说,put请求是restful请求中的类型,也就是说es支持http请求的方式执行命令,只需在
/
前添加es的地址即可。
PUT /my_test_index_part2
{"settings": {"number_of_shards": 3,"number_of_replicas": 1},"mappings": {"properties": {"id": {"type": "integer"},"name": {"type": "keyword"},"age": {"type": "integer"},"remark": {"type": "text"}}}
}// 执行结果
{"acknowledged" : true,"shards_acknowledged" : true,"index" : "my_test_index_part2"
}
三、数据操作
添加数据(Document)
索引(index)中的数据称为document,一条document相当于一条数据,下面介绍几种添加数据的方法
POST /<index>/_doc
PUT /<index>/_doc/<_id>POST /<index>/_create/<_id>
PUT /<index>/_create/<_id>
第一个单词代表请求方式、<index>
指索引名称、_doc
和_create
代表是两种方式插入数据,下面开始插入数据
_doc方式
分别执行下面命令
POST /my_test_index_part2/_doc
{"id": "1","name": "张三","age": "18","remark": "张三爱吃肉"
}POST /my_test_index_part2/_doc/2
{"id": "2","name": "李四","age": "19","remark": "李四爱吃水果"
}PUT /my_test_index_part2/_doc/3
{"id": "3","name": "王五","age": "20","remark": "王五爱吃蔬菜"
}GET /my_test_index_part2/_search
先说结论,在_doc
的情况下
- POST 可以创建成功,但是 _id 是es随机给定的
- POST + <_id> 可以创建成功,_id也是我们指定的
- PUT 不可以运行
- PUT + <_id> 可以创建成功,_id也是我们指定的
运行结果如下:
{// 省略...."hits" : {"total" : {"value" : 3,"relation" : "eq"},"max_score" : 1.0,"hits" : [{"_index" : "my_test_index_part2","_type" : "_doc","_id" : "2","_score" : 1.0,"_source" : {"id" : "2","name" : "李四","age" : "19","remark" : "李四爱吃水果"}},// 省略....{"_index" : "my_test_index_part2","_type" : "_doc","_id" : "8tf8sYoBBTGuuZu3VQCK","_score" : 1.0,"_source" : {"id" : "1","name" : "张三","age" : "18","remark" : "张三爱吃肉"}}]}
}
_create方式
分别执行下面命令
POST /my_test_index_part2/_create/4
{"id":"4","name": "李四四","age": "21","remark":"李四四爱吃水果"
}PUT /my_test_index_part2/_create/5
{"id":"5","name": "王五五","age": "22","remark":"王五五爱吃蔬菜"
}GET /my_test_index_part2/_search
结论,在_create
的情况下
- POST 不可以运行
- POST + <_id> 可以创建成功,_id也是我们指定的
- PUT 不可以运行
- PUT + <_id> 可以创建成功,_id也是我们指定的
数据(Document)修改
在上述命令中remark字段添加叹号后运行结果,只有_doc
带有<_id>
的命令执行成功,其他均失败。结论:必须指定**<_id>**
,在**<_doc>**
下进行执行才行。
POST /my_test_index_part2/_doc/5
{"id":"5","name": "王五五","age": "22","remark":"王五五爱吃蔬菜!!!"
}// 执行此命令查看修改结果
GET /my_test_index_part2/_search
删除
<_id>填写返回的_id字段的值即可
DELETE /<index>/_doc/<_id>DELETE /my_test_index/_doc/aCnJjYoBcmOMV0ezI5zx
四、结论
新增
POST /<index>/_doc
POST /<index>/_doc/<_id>
- <_id>不指定时,ES会为我们自动生成id;
- 指定<_id>时,且id在索引中不存在,ES将添加一条指定id的数据;
- 指定<_id>时,但id在索引中存在,ES将会更新这条数据;
PUT /<index>/_doc/<_id>
- <_id>必须指定,不指定会报错;
- <_id>在索引中不存在,为添加新数据;
- <_id>在索引中存在,为修改数据;
POST /<index>/_create/<_id>
PUT /<index>/_create/<_id>
- id必须指定;
- 指定的id如果在索引中存在,报错,添加不成功;
- 指定的id在索引中不存在,添加成功,符合预期;
删除
DELETE /<index>/_doc/<_id>
查询
单条
GET /<index>/_doc/<_id>
全部
GET /<index>/_doc/_search