开发者学堂课程【ElasticSearch 最新快速入门教程:ES 批量操作-bulk】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/642/detail/10611
ES 批量操作-bulk
内容介绍:
一、讲义
二、详细笔记
三、演示
四、补充说明
一、讲义
Bulk 是将一个文件中一系列的索引信息进行批处理。
Bulk api 可以帮助我们同时执行多个请求
格式:
action:[index | create | update | delete]
metadata:index,type,id
request body:source(删除操作不需要)
{action:{metadata}}\n
{request body}\n
{action:{metadata}}\n
{request body}\n
create 和 index的区别
如果数据存在,使用 create 操作失败,会提示文档已经存在,使用 index 则可以成功执行。使用文件的方式
vi requests
curl -XPOST/PUT http://localhost:9200/index/type/ bulk --data-binary @path
比如curl -XPOST 'http://localhost:9200/bank/accout/ bulk?pretty'--data-binary
"@data/accounts.json''
accounts 数据说明.txt
银行客户账号信息文档,文档 schema 如下
{
"account_number": 0,
"balance": 16623,
"firstname": "Bradshaw",
"lastname": "Mckenzie",
"age": 29,
"gender": "F",
"address": "244 Columbus Place",
"employer": "Euron",
"email":
"bradshawmckenzie@euron.com",
"city": "Hobucken",
"state": "CO"
}
可以查看一下各个索引库信息
curl 'http://localhost:9200/ cat/indices?v'
Bulk 请求可以在 URL 中声明/index 或者/index/_type
Bulk 一次最大处理多少数据量
Bulk 会把将要处理的数据载入内存中,所以数据量是有限制的
二、详细笔记
步骤︰
①新建名为 bank 的索引库
②将待处理的数据上传到 linux 指定目录下
③进行批量导入操作
curl -H "Content-Type: application/json" -XPOST 'http://JANSON01:9200/bank/account/_bulk' --data-binary @/home/mike/data/accounts.json
批处理注意点说明︰
a) Bulk 请求可以在 URL 中声明/_index 或者/_index/_type
b) Bulk 一次最大处理多少数据量
Bulk 会把将要处理的数据载入内存中,所以数据量是有限制的
最佳的数据量不是一个确定的数值,它取决于你的硬件,你的文档大小以及复杂性,你的索引以及搜索的负载
一般建议是1000~5000个文档,如果你的文档很大,可以适当减少队列,大小建议是5~15MB,默认不能超过100M,可以在 es 的配置文件中修改这个值
http.max_content_length: 100mb
c) 灵活使用批处理操作,会大幅度提高程序执行的效率,但是,批处理操作的数据量是有一个临界值的,不是没有极限的!
三、演示
先来创建索引库,输入
curl -XPOST ‘http://JANSON01:9200/bank’
结果显示创建失败,再使用 put 进行创建,输入
curl -XPUT ‘http://JANSON01:9200/bank?pretty’
如图显示创建成功
然后将带批量新增的信息上传到 jerry 目录下,输入
ll
cd data/
ll
pwd
显示刚才定位到的路径 /home/jerry/data
上传文件时窗口下方有一个文件管理,打开按地址寻找到 elastic,然后点击上传,上传地址本节演示为 accounts.json
上传完成后输入ll,确认上传成功
再输入
curl -H ‘Content-Type: application/json’ -XPOST 'http://JANSON01:9200/bank/account/_bulk?pretty' --data-binary
‘@/home/jerry/accounts.json’
显示结果文件/home/jerry/accounts.json 不能被读
再来打开管理器选择 JANSON01查看路径
输入
su -l jerry
ll
cd data/
ll
pwd
显示结果为/home/jerry/data
在回到刚才管理器中修改
curl -H ‘Content-Type: application/json’ -XPOST 'http://JANSON01:9200/bank/account/_bulk?pretty' --data-binary
‘@/home/jerry/data/accounts.json’
运行成功,此时再来查询,输入
Curl -XGET ‘http://JANSON01:9200/bank/account/_search?pretty’
查询成功
四、补充说明
可以查看一下各个索引库信息
curl ‘http://janson01:9200/_cat/indices?v'
[root@JANSONO1~]#curl 'http://janson01:9200/_cat/indices?v'
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
yellow open bigdata Np2VvkyQQeqtNyzOug8cOA 5 1 5 0 19.2kb 19.2kb
yellow open bank yrks_XJdsJWJZgo1btOGkQ 5 1 1000 0 482.7kb 482.7kb
ElasticSearch 的集群状态:
Green :所有的主分片和副分片都可用(主分片:es 集群中主节点上的分片;副分片∶es 集群中从节点上的分片)
Yellow:所有的主分片都可用,不是所有的副分片都可用
Red :不是所有的主分片和副分片都可用