Elasticsearch 入门: _bulk 批量导入数据
时间:2022-06-01
本文章向大家介绍Elasticsearch 入门: _bulk 批量导入数据,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
批量导入数据
使用 Elasticsearch Bulk API /_bulk
批量 update
步骤:
- 需求:我希望批量导入一个
movie
type 的名词列表到wordbank
index 索引。 - 准备数据:
根据官方文档,Json 数据要准备成这个格式的:
action_and_meta_datan optional_sourcen action_and_meta_datan optional_sourcen .... action_and_meta_datan optional_sourcen
其中 action 需要是
index
,create
,delete
andupdate
中的一个。 接下来准备这样的数据: {"index": {"_index": "wordbank", "_type": "movie", "_id": 1}} {"doc": {"name": "权力的游戏"}} {"index": {"_index": "wordbank", "_type": "movie", "_id": 2}} {"doc": {"name": "熊出没"}} - POST bulk curl -X POST "localhost:9200/_bulk" -H 'Content-Type: application/json' --data-binary @movie_names
- 批量 update 成功 {"took":50,"errors":false,"items":[{"index":{"_index":"wordbank","_type":"movie","_id":"1","_version":1,"result":"created","_shards":{"total":2,"successful":1,"failed":0},"_seq_no":0,"_primary_term":1,"status":201}},{"index":{"_index":"wordbank","_type":"movie","_id":"2","_version":1,"result":"created","_shards":{"total":2,"successful":1,"failed":0},"_seq_no":0,"_primary_term":1,"status":201}}]}
遇到过的坑:
- illegal_argument_exception:
{"error":{"root_cause":[{"type":"illegal_argument_exception","reason":"The bulk request must be terminated by a newline [n]"}],"type":"illegal_argument_exception","reason":"The bulk request must be terminated by a newline [n]"},"status":400}
- 原因:批量导入的 json 文件最后必须要以
n
结尾,也就是需要一个空行。 - 解决:在 json 文件末尾加多一个回车。
- 原因:批量导入的 json 文件最后必须要以
- header 问题:
{"error":"Content-Type header [application/x-www-form-urlencoded] is not supported","status":406}
- 原因:Elasticsearch 6.x 之后 curl 的 content-type 更严格了。
- 解决:在 curl 命令后多加一条
-H 'Content-Type: application/json'
- action_request_validation_exception:
{"error":{"root_cause":[{"type":"action_request_validation_exception","reason":"Validation Failed: 1: script or doc is missing;2: script or doc is missing;"}],"type":"action_request_validation_exception","reason":"Validation Failed: 1: script or doc is missing;2: script or doc is missing;"},"status":400}
- 原因:bulk update 时,更新的文本需要放到
"doc"
字典下,另外 update 在这里就只是 update,如果文档不存在会报错。 - 解决:
{ "field1" : "value1", "field2" : "value2" } --> { "doc" : { "field1" : "value1", "field2" : "value2" } }
- 原因:bulk update 时,更新的文本需要放到
- 不要直接在 terminal 把 curl 的结果显示出来
- 原因:因为 curl 返回的结果是个单行 json 当批量处理条目多的时候,这个单行的 json 很长。而且
-s
也silent 模式是不会把这个结果去掉的,因为-s
是 curl 的参数,会屏蔽掉 curl 的 log,但 Elasticsearch 的返回 json 是不会被屏蔽掉的。 - 解决:把输出结果导到文件 curl -s 'http://example.com' > /dev/null
- 原因:因为 curl 返回的结果是个单行 json 当批量处理条目多的时候,这个单行的 json 很长。而且
- 据说不要重复指定 index 和 type:来源,可能是我数据量比较小,2w条,差距不大。不过前者确实省文档空间。 推荐使用这种: POST /website/log/_bulk { "index": {}} { "event": "User logged in" } 而不是这种: POST /_bulk { "index": { "_index": "website" , "_type": "blog" , }} { "title": "Overriding the default type" }
- linux学习第五十二篇: exportfs命令,NFS客户端问题,FTP介绍,使用vsftpd搭建ftp服务
- linux学习第五十四篇:Tomcat介绍,安装jdk,安装Tomcat
- linux学习第五十九篇:LVS DR模式搭建,keepalived lvs
- linux学习第五十四篇:配置Tomcat监听80端口,配置Tomcat的虚拟主机,Tomcat日志
- linux学习第五十六篇:集群介绍,keepalived介绍,用keepalived配置高可用集群
- linux学习第五十八篇: 负载均衡集群介绍,LVS介绍,LVS的调度算法,LVS NAT模式搭建
- Python中eval带来的潜在风险,你知道吗?
- React Native自定义导航条
- android混淆那些坑
- 微信小程序开发入门篇
- Support Annotation Library使用详解
- React Native之Navigator
- React Native组件生命周期
- React Native使用原生组件
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 入坑 LinkedList,i 了 i 了
- Elasticsearch 利用API进行搜索
- 通过 Serverless Regsitry 快速开发与部署一个 WordCount 实例
- 聊聊dubbo-go的gracefulShutdownFilter
- 强烈推荐:2020年15道优秀的TypeScript练习题 (上集)
- 聊聊dubbo-go的GenericFilter
- Salesforce LWC学习(十九) 针对 lightning-input-field的label值重写
- MySQL定时备份方案
- Nginx多方面调优策略
- 太厉害了!这应该是目前Redis可视化工具最全的横向评测
- pip install时timeout设置
- 聊聊dubbo-go的TpsLimitFilter
- 聊聊dubbo-go的TokenFilter
- 你这磨人的小妖精——选中文本并标注的实现过程
- VUE跨页面传值的精妙