Elasticsearch 批量导入数据1
2023-03-31 10:28:46 时间
前言
Elasticsearch 是一款非常高效的全文检索引擎。
Elasticsearch 可以非常方便地进行数据的多维分析,所以大数据分析领域也经常会见到它的身影,生产环境中绝大部分新产生的数据可以通过应用直接导入,但是历史或初始数据可能会需要单独处理,这种情况下可能遇到需要导入大量数据的情况
这里简单分享一下批量导入数据的操作方法与相关基础,还有可能会碰到的问题,详细内容可以参考 官方文档
Tip: 当前的最新版本为 Elasticsearch 2.2.0
概要
bulk API
ES提供了一个叫 bulk 的 API 来进行批量操作
它用来在一个API调用中进行大量的索引更新或删除操作,这极大的提升了操作效率
形式
API
API 可以是 /_bulk, /{index}/_bulk, 或 {index}/{type}/_bulk
这三种形式,当索引或类型已经指定后,数据文件中如不明确指定或申明的内容,就会默认使用API中的值
API 以是 /_bulk
结尾的,并且跟上如下形式的 JSON 数据
数据内容格式
action_and_meta_data
optional_source
action_and_meta_data
optional_source
....
action_and_meta_data
optional_source
Note: 最后的一行也必须以
结尾
可用方法
可用的操作有 index, create, delete 和 update
:
- index 和 create 得在操作与元数据(action_and_meta_data)之后另起一行然后接上内容(必须遵循这样的格式 ,后面会演示不这么做导致操作失败的示例)
- delete 只用接上元数据就可以了,不必接上内容(原因自不用说,定位到文档就OK了)
- update 得接上要变更的局部数据,也得另起一行
文本指定
由于是批量操作,所以不太会直接使用命令行的方式手动指定,更多的是使用文件,如果使用文本文件,则得遵循如下格式
curl -s -XPOST localhost:9200/_bulk --data-binary "@requests"
Tip: requests 是文件名 ,
-s
是静默模式,不产生输出,也可以使用> /dev/null
替代
导入数据
尝试不按要求索引数据
[root@es-bulk tmp]# curl localhost:9200/stuff_orders/order_list/903713?pretty
{
"_index" : "stuff_orders",
"_type" : "order_list",
"_id" : "903713",
"found" : false
}
[root@es-bulk tmp]# cat test.json
{"index":{"_index":"stuff_orders","_type":"order_list","_id":903713}}{"real_name":"刘备","user_id":48430,"address_province":"上海","address_city":"浦东新区","address_district":null,"address_street":"上海市浦东新区广兰路1弄2号345室","price":30.0,"carriage":6.0,"state":"canceled","created_at":"2013-10-24T09:09:28.000Z","payed_at":null,"goods":["营养早餐:火腿麦满分"],"position":[121.53,31.22],"weight":70.0,"height":172.0,"sex_type":"female","birthday":"1988-01-01"}
[root@es-bulk tmp]# curl -XPOST 'localhost:9200/stuff_orders/_bulk?pretty' --data-binary @test.json
{
"error" : {
"root_cause" : [ {
"type" : "action_request_validation_exception",
"reason" : "Validation Failed: 1: no requests added;"
} ],
"type" : "action_request_validation_exception",
"reason" : "Validation Failed: 1: no requests added;"
},
"status" : 400
}
[root@es-bulk tmp]# curl localhost:9200/stuff_orders/order_list/903713?pretty
{
"_index" : "stuff_orders",
"_type" : "order_list",
"_id" : "903713",
"found" : false
}
[root@es-bulk tmp]#
相关文章
- 如何使用mysql查询where条件里的or和and
- 【ASP.NET Core】EF Core - “影子属性”
- 如何用python list删除指定元素?
- 【ASP.NET Core】EF Core 模型与数据库的创建
- 如何处理单元测试中的请求?
- 【.net 深呼吸】连接Access数据库应注意的几点
- 【Win 10 应用开发】Sqlite 数据库的简单用法
- 【Win 10 应用开发】通过数据绑定更新进度条
- 【Win 10 应用开发】UDP广播
- 【Win 10应用开发】延迟共享
- 【Win 10 应用开发】共享目标(UWP)
- 金融/语音/音频处理学术速递[11.24]
- 计算照片的面积(UWP篇)
- 【Win 10应用开发】分阶段进行数据绑定
- 【Win10 应用开发】实现数据的增量加载
- Mysql基础入门知识点总结笔记
- TCP/IP四层模型对比OSI七层网络模型的区别是啥?数据传输过程原来是这样的!
- 【Win10应用开发】签名与验证
- BT × IT | 如何利用神经网络做空间转录组分析?
- DSTG:基于图形的卷积网络对空间转录组数据进行去卷积