Elasticsearch数据增删改

说明:

    本文介绍 ElasticSearch 增加、删除、修改的使用示例。通过Restful 接口和 Postman实现.ElasticSearch 版本为6.3.2。

关于索引的创建请参考:https://www.jianshu.com/p/828dce8a99e0

关于es的安装请参考:https://www.jianshu.com/p/fd5f0101c434

我先创建一个叫local_mst_student_idx_1的索引,通过hand插件观察他的count条数为0.(详细见下图)

Elasticsearch数据增删改_第1张图片

新增数据:

单条新增(指定_id):

URL:http://服务ip:端口/索引index/type/_id

--Post http://127.0.0.1:9200/local_mst_student_idx_1/mst_student/1

json参数:

{ "id":"1", "stu_code":"1A0001", "stu_name":"张三 ", "stu_age":"18", "stu_date":"1528887157717", "stu_bool":"true" }


Elasticsearch数据增删改_第2张图片

单条新增(不指定_id):

URL:http://服务ip:端口/索引index/type

es会自动生成一个唯一的_id

--Post http://127.0.0.1:9200/local_mst_student_idx_1/mst_student

json参数:

{ "id":"2", "stu_code":"1A0002", "stu_name":"李四", "stu_age":"28", "stu_date":"1528887157717", "stu_bool":"true" }


Elasticsearch数据增删改_第3张图片

批量新增:

关于批量新增我们需要创建一个.json的文件,里面构建json数据。(如下图)

Elasticsearch数据增删改_第4张图片

{"index":{"_id":"3"}}{"id":"3","stu_code":"1A0003","stu_name":"王五","stu_age":"20","stu_date":"1528887157717","stu_bool":"true"}{"index":{"_id":"4"}}{"id":"4","stu_code":"1A0004","stu_name":"赵六","stu_age":"21","stu_date":"1528887157717","stu_bool":"true"}{"index":{"_id":"5"}}{"id":"5","stu_code":"1A0005","stu_name":"孙七","stu_age":"22","stu_date":"1528887157717","stu_bool":"true"}

通过postman请求:

-- Post http://localhost:9200/local_mst_student_idx_1/mst_student/_bulk?pretty

注意:通过post请求body这时候需要选择bonary,然后选择我们刚刚创建的.json文件即可。(详细如下图)


Elasticsearch数据增删改_第5张图片

点击执行我们可能会遇到下面这种情况,那是因为body的类型是text类型的,它不支持,我们点击下拉框改成JSON选项就ok了。

Elasticsearch数据增删改_第6张图片

下面我展示一下执行批量新增的效果图:


Elasticsearch数据增删改_第7张图片

上面明显的返回了我们新增的数据信息。

(注:批量新增可以在URL中指定index和type也可已在.json文件中指定;我上面是使用URL指定index和type的,官网文档案例是在.json文档中指定,大家可以参考一下。)

关于批量新增有啥疑问的可以参考官方文档:

https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-bulk.html

执行完后我们通过hand插件观察Elasticsearch数据情况:(如下图)


Elasticsearch数据增删改_第8张图片

很清晰的看出我们新增的数据已经全部到ES里面。

删除数据:

单个删除:

URL:http://服务ip:端口号/索引index/type/_id   (_id:指定删除)

--DELETE  http://localhost:9200/local_mst_student_idx_1/mst_student/1/

单个删除比较简单:(如下图)

Elasticsearch数据增删改_第9张图片

查询式删除:

通过条件查询删除某些符合条件的数据;我们测试把张三和王五删除掉。

--POST  http://localhost:9200/local_mst_student_idx_1/mst_student/_delete_by_query?pretty

注意:这里请求中末尾我们使用的是_delete_by_query  API

json参数:

{ "query":{ "bool": { "filter": { "terms": { "_id": ["1","3"] } } } }}


Elasticsearch数据增删改_第10张图片

关于批量删除有什么疑问的可以参考官方文档:

https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-delete-by-query.html

执行成功后观察数据是否被删除:


Elasticsearch数据增删改_第11张图片

修改数据1:

ES修改操作有一种特殊;假如我们使用下图这种请求

-- POST  http://localhost:9200/local_mst_student_idx_1/mst_student/4?pretty

json参数:

{ "stu_name": "Mack Li"}


Elasticsearch数据增删改_第12张图片

通过观察我指定_id为4的数据进行修改,他只修改了我传参的stu_name字段,并把其他字段全部改为空了。

其实是这样的:

    当我们发送该请求后,如果不存在_id=4的文档数据,索引中将新建一个文档_id=4,如果索引中在之前已经存在_id=4的文档数据,新文档数据将覆盖历史文档数据。如果我们存入的文档id和已存在的文档id都不相同则不会影响。索引文档时,_id部分是可选的,我们上面也有案例,如果未指定,es将生成一个随机_id,然后用它来创建新文档。当然我可能不想要这种效果。别急下面我来讲解另外一种修改方式。

修改数据2:

这里我们发现和上面的请求有哪些不同,我们发现下面图片的URL的末尾多了一个_update请求命令.

1.通过doc文档格式修改

-- POST  http://localhost:9200/local_mst_student_idx_1/mst_student/5/_update?pretty

JSON参数:

{ "doc":{"stu_name": "Mack Zhao","stu_age":"19"}}

2.通过脚本格式修改

-- POST  http://localhost:9200/local_mst_student_idx_1/mst_student/5/_update?pretty

{ "script": "ctx._source.stu_age = 24"}

Elasticsearch数据增删改_第13张图片

这种更新其实也不是在原文档进行就地更新。es无论何时进行更新他都会删除旧文档,索引一个新文档来立刻替换它。当然es还提供了多条件的修改。我们可以参考官方文档去挖掘在此我就不详细的讲解了。

关于es多条件的修改可以参考官方文档:

https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-update-by-query.html

关于增删改我们就讲到这,新的探索我会再第一时间给大家分享。

你可能感兴趣的:(Elasticsearch数据增删改)