ElasticSearch扫盲概念篇[ES系列] - 第500篇
ElasticSearch重建/创建/删除索引操作 - 第501篇
ElasticSearch文档操作[ES系列] - 第502篇
导读
Hi,大家好,我是悟纤。我就是我,不一样的烟火。我就是我,与众不同的小苹果。
这一节来看看ES的文档批量操作 – 增删改查。
一、文档批量操作
批量操作可以减少网络连接所产生的开销,提升性能
· 支持在一次API调用中,对不同的索引进行操作
· 可以在URI中指定Index,也可以在请求的Payload中进行
· 操作中单条操作失败,并不会影响其他操作
· 返回结果包括了每一条操作执行的结果
1.1 批量写入
批量对文档进行写操作是通过_bulk的API来实现的
· 请求方式:POST
· 请求地址:_bulk
· 请求参数:通过_bulk操作文档,一般至少有两行参数(或偶数行参数)
o 第一行参数为指定操作的类型及操作的对象(index,type和id)
o 第二行参数才是操作的数据
参数类似于:
{"actionName":{"_index":"indexName", "_type":"typeName","_id":"id"}}
{"field1":"value1", "field2":"value2"}
- actionName:表示操作类型,主要有create,index,delete和update
1.2批量创建文档create
POST _bulk
{"create":{"_index":"article","_id":3}}
{"id":3,"title":"fox老师","content":"老师666","tags":["java", "面向对象"],"create_time":1554015482530}
{"create":{"_index":"article", "_id":4}}
{"id":4,"title":"mark老师","content":"老师NB","tags":["java", "面向对象"],"create_time":1554015482530}
1.3普通创建或全量替换index
POST _bulk
{"index":{"_index":"article", "_id":3}}
{"id":3,"title":"张三老师","content":"老师888","tags":["java", "面向对象"],"create_time":1554015482530}
{"index":{"_index":"article", "_id":4}}
{"id":4,"title":"李四老师","content":"老师888","tags":["java", "面向对象"],"create_time":1554015482530}
· 如果原文档不存在,则是创建
· 如果原文档存在,则是替换(全量修改原文档)
1.4批量修改update
POST _bulk
{"update":{"_index":"article", "_id":3}}
{"doc":{"title":"ES从入门到放弃"}}
{"update":{"_index":"article", "_id":4}}
{"doc":{"create_time":1654018421008}}
1.5批量删除delete
POST _bulk
{"delete":{"_index":"article", "_id":3}}
{"delete":{"_index":"article", "_id":4}}
1.6组合应用
POST _bulk
{"index":{"_index":"article", "_id":3}}
{"id":3,"title":"悟空老师","content":"悟空老师666","tags":["java", "面向对象"],"create_time":1554015482530}
{"delete":{"_index":"article", "_id":3}}
{"update":{"_index":"article", "_id":4}}
{"doc":{"create_time":1654018421008}}
1.7批量读取
es的批量查询可以使用mget和msearch两种。其中mget是需要我们知道它的id,可以指定不同的index,也可以指定返回值source。msearch可以通过字段查询来进行一个批量的查找。
1.7.1 _mget
GET _mget
{
"docs": [
{
"_index": "es_db",
"_id": 1
},
{
"_index": "article",
"_id": 4
}
]
}
#可以通过ID批量获取es_db的数据
GET /es_db/_mget
{
"docs": [
{
"_id": 1
},
{
"_id": 4
}
]
}
#简化后
GET /es_db/_mget
{
"ids":["1", "2"]
}
1.7.2 _msearch
在_msearch中,请求格式和bulk类似。查询一条数据需要两个对象,第一个设置index和type,第二个设置查询语句。查询语句和search相同。如果只是查询一个index,我们可以在url中带上index,这样,如果查该index可以直接用空对象表示。
GET /es_db/_msearch
{}
{"query" : {"match_all" : {}}, "from" : 0, "size" : 2}
{"index" : "article"}
{"query" : {"match_all" : {}}}
我就是我,是颜色不一样的烟火。
我就是我,是与众不同的小苹果。
à悟纤学院:https://t.cn/Rg3fKJD
学院中有Spring Boot相关的课程!点击「阅读原文」进行查看!
SpringBoot视频:http://t.cn/A6ZagYTi
SpringBoot交流平台:https://t.cn/R3QDhU0
SpringSecurity5.0视频:http://t.cn/A6ZadMBe
ShardingJDBC分库分表:http://t.cn/A6ZarrqS
分布式事务解决方案:http://t.cn/A6ZaBnIr
JVM内存模型调优实战:http://t.cn/A6wWMVqG
Spring入门到精通:https://t.cn/A6bFcDh4
大话设计模式之爱你:https://dwz.cn/wqO0MAy7