简介: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