说明:
本文介绍 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.(详细见下图)
新增数据:
单条新增(指定_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" }
单条新增(不指定_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" }
批量新增:
关于批量新增我们需要创建一个.json的文件,里面构建json数据。(如下图)
{"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文件即可。(详细如下图)
点击执行我们可能会遇到下面这种情况,那是因为body的类型是text类型的,它不支持,我们点击下拉框改成JSON选项就ok了。
下面我展示一下执行批量新增的效果图:
上面明显的返回了我们新增的数据信息。
(注:批量新增可以在URL中指定index和type也可已在.json文件中指定;我上面是使用URL指定index和type的,官网文档案例是在.json文档中指定,大家可以参考一下。)
关于批量新增有啥疑问的可以参考官方文档:
https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-bulk.html
执行完后我们通过hand插件观察Elasticsearch数据情况:(如下图)
很清晰的看出我们新增的数据已经全部到ES里面。
删除数据:
单个删除:
URL:http://服务ip:端口号/索引index/type/_id (_id:指定删除)
--DELETE http://localhost:9200/local_mst_student_idx_1/mst_student/1/
单个删除比较简单:(如下图)
查询式删除:
通过条件查询删除某些符合条件的数据;我们测试把张三和王五删除掉。
--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"] } } } }}
关于批量删除有什么疑问的可以参考官方文档:
https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-delete-by-query.html
执行成功后观察数据是否被删除:
修改数据1:
ES修改操作有一种特殊;假如我们使用下图这种请求
-- POST http://localhost:9200/local_mst_student_idx_1/mst_student/4?pretty
json参数:
{ "stu_name": "Mack Li"}
通过观察我指定_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"}
这种更新其实也不是在原文档进行就地更新。es无论何时进行更新他都会删除旧文档,索引一个新文档来立刻替换它。当然es还提供了多条件的修改。我们可以参考官方文档去挖掘在此我就不详细的讲解了。
关于es多条件的修改可以参考官方文档:
https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-update-by-query.html
关于增删改我们就讲到这,新的探索我会再第一时间给大家分享。