前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Elasticsearch 入门: _bulk 批量导入数据

Elasticsearch 入门: _bulk 批量导入数据

作者头像
王兵
发布于 2018-06-14 08:21:46
发布于 2018-06-14 08:21:46
2.5K0
举报
文章被收录于专栏:程序员笔记程序员笔记
批量导入数据

使用 Elasticsearch Bulk API /_bulk批量 update

步骤:
  1. 需求:我希望批量导入一个 movie type 的名词列表到 wordbank index 索引。
  2. 准备数据: 根据官方文档,Json 数据要准备成这个格式的: action_and_meta_data\n optional_source\n action_and_meta_data\n optional_source\n .... action_and_meta_data\n optional_source\n 其中 action 需要是 index, create, delete and update 中的一个。 接下来准备这样的数据: {"index": {"_index": "wordbank", "_type": "movie", "_id": 1}} {"doc": {"name": "权力的游戏"}} {"index": {"_index": "wordbank", "_type": "movie", "_id": 2}} {"doc": {"name": "熊出没"}}
  3. POST bulk curl -X POST "localhost:9200/_bulk" -H 'Content-Type: application/json' --data-binary @movie_names
  4. 批量 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}}]}
遇到过的坑:
  1. 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 文件末尾加多一个回车。
  2. 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'
  3. 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" } }

  4. 不要直接在 terminal 把 curl 的结果显示出来
    • 原因:因为 curl 返回的结果是个单行 json 当批量处理条目多的时候,这个单行的 json 很长。而且-s 也silent 模式是不会把这个结果去掉的,因为 -s 是 curl 的参数,会屏蔽掉 curl 的 log,但 Elasticsearch 的返回 json 是不会被屏蔽掉的。
    • 解决:把输出结果导到文件 curl -s 'http://example.com' > /dev/null
  5. 据说不要重复指定 index 和 type:来源,可能是我数据量比较小,2w条,差距不大。不过前者确实省文档空间。 推荐使用这种: POST /website/log/_bulk { "index": {}} { "event": "User logged in" } 而不是这种: POST /_bulk { "index": { "_index": "website" , "_type": "blog" , }} { "title": "Overriding the default type" }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.05.10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Elasticsearch 批量导入数据1
Elasticsearch 可以非常方便地进行数据的多维分析,所以大数据分析领域也经常会见到它的身影,生产环境中绝大部分新产生的数据可以通过应用直接导入,但是历史或初始数据可能会需要单独处理,这种情况下可能遇到需要导入大量数据的情况
franket
2021/12/02
1.2K0
elasticsearch里面bulk的用法
上篇文章介绍了在es里面批量读取数据的方法mget,本篇我们来看下关于批量写入的方法bulk。 bulk api可以在单个请求中一次执行多个索引或者删除操作,使用这种方式可以极大的提升索引性能。 bulk的语法格式是: action and meta_data \n optional source \n action and meta_data \n optional source \n action and meta_data \n optional source \n ` 从上面能够看到,两行数据构
我是攻城师
2018/05/15
1.7K0
Elasticsearch —— bulk批量导入数据
在使用Elasticsearch的时候,一定会遇到这种场景——希望批量的导入数据,而不是一条一条的手动导入。那么此时,就一定会需要bulk命令! 更多内容参考我整理的Elk教程 bulk批量导入 批量导入可以合并多个操作,比如index,delete,update,create等等。也可以帮助从一个索引导入到另一个索引。 语法大致如下; action_and_meta_data\n optional_source\n action_and_meta_data\n optional_source\n
用户1154259
2018/01/17
3.2K0
Elasticsearch —— bulk批量导入数据
Elasticsearch 7.x:3、文档管理
(2)不指定文档ID 添加文档时可以不指定文档id,则文档id是自动生成的字符串。注意,需要使用POST方法,而不是PUT方法。
程裕强
2019/05/27
2K0
Elasticsearch(二)——Rest API
RESTful 接口 URL 的格式是: http://cluster的地址: 9200/<index>I<type>I [<id>] 其中,index, type 是必须提供的( index 可以理解为数据库;type 理解为数据表); id 是可选的(相当于数据库表中记 录的主键是唯一的。如果不提供, Elasticsearch 会向动生成。增 、删、改,查分别对应 HTTP 请求的 PUT 、DELETE、POST、GET方法。
羊羽shine
2019/05/29
1.1K0
elasticsearch之crud
post:带id不存在则新增,存在则覆盖(全量更新),不带id永远新增,且自动生成id
九转成圣
2024/04/10
1040
Elasticsearch从入门到放弃:文档CRUD要牢记
在Elasticsearch中,文档(document)是所有可搜索数据的最小单位。它被序列化成JSON存储在Elasticsearch中。每个文档都会有一个唯一ID,这个ID你可以自己指定或者交给Elasticsearch自动生成。
Jackeyzhe
2020/03/11
6940
Bulk API
Bulk API提供了一种在单个请求中针对批量文档执行idnex、create、delete和update 操作的方法。显然,批量操作大大提升了CRUD操作的效率,因为它将多个IO请求归并到一个IO请求中。
程序猿杜小头
2022/12/01
4360
Elasticsearch 的简单使用
关于安装就不多说了,以前的版本安装起来还停麻烦,需要你预先 安装 JDK,但是 Elasticsearch 7 及以后的版本相对来说 安装非常简单,内置一个 OpenJDK,只需要下载 Elasticsearch 的安装包、解压、运行即可
hedeqiang
2019/12/18
8830
Elasticsearch 的简单使用
Elasticsearch深入:字段的存储
在 Elasticsearch 中,通常每个文档的每一个字段都会被存储在 shard 里存放 source 的地方,比如:
HLee
2021/01/04
2.1K0
Elasticsearch深入:字段的存储
Elasticsearch 空值处理实战指南
Accepts a string value which is substituted for any explicit null values. Defaults to null, which means the field is treated as missing.
铭毅天下
2020/11/19
4K0
Elasticsearch 空值处理实战指南
Elasticsearch: Painless script编程
我们之前看见了在 Elasticsearch 里的 ingest node 里,我们可以通过以下 processor 的处理帮我们处理我们的一些数据。它们的功能是非常具体而明确的。那么在 Elasticsearch 里,有没有一种更加灵活的方式可供我们来进行编程处理呢?如果有,它使用的语言是什么呢?
腾讯云大数据
2020/09/28
3K0
Elasticsearch: Painless script编程
Elasticsearch使用:Scripting API(二)
我们之前看见了在 Elasticsearch 里的 ingest node 里,我们可以通过以下 processor 的处理帮我们处理我们的一些数据。它们的功能是非常具体而明确的。那么在 Elasticsearch 里,有没有一种更加灵活的方式可供我们来进行编程处理呢?如果有,它使用的语言是什么呢?
HLee
2021/01/12
1.4K0
Elasticsearch使用:Scripting API(二)
【ES三周年】使用 Ingest Pipeline 在 Elasticsearch 中对数据进行预处理
Ingest pipeline 允许文档在被索引之前对数据进行预处理,将数据加工处理成我们需要的格式。例如,可以使用 ingest pipeline添加或者删除字段,转换类型,解析内容等等。Pipeline 由一组处理器 Processor 构成,每个处理器依次运行,对传入的文档进行特定的更改。Ingest pipeline 和 Logstash 中的 filter 作用相似,并且更加轻量和易于调试。
Se7en258
2023/02/16
4.1K6
【ES三周年】使用 Ingest Pipeline 在 Elasticsearch 中对数据进行预处理
Elasticsearch问题汇总
这是bool查询的条件超过了默认的1024上限,可以通过修改全局配置来增加上限,需要注意的是别设置太高,会消耗太多的CPU资源和内存。
雨临Lewis
2022/01/12
1.7K0
Elasticsearch:inverted index,doc_values及source
这个几个概念分别指的是什么?有什么用处?如何配置它们?只有我们熟练地掌握了这些概念,我们才可以正确地使用它们。
腾讯云大数据
2020/09/29
1.3K0
Elasticsearch:inverted index,doc_values及source
elasticsearch-文档更新常用操作
注意我们返回的 created 返回值,如果是更新 created 将返回false
用户2825413
2019/07/15
1.4K0
Go Elasticsearch 增加快速入门
本文借助第三方库 olivere/elastic 完成 Go 对 ES 的更新操作。
恋喵大鲤鱼
2021/12/06
1.1K0
Go Elasticsearch 增加快速入门
Elasticsearch 学习笔记
es提供了一个测试分词的 api 接口,方便验证分词效果,endpoint 是 _analyze
学徒漠筱歌
2022/07/17
6100
Es初步检索命令
PUT customer/external/1;在 customer 索引下的 external 类型下保存 1 号数据为
一个风轻云淡
2023/10/15
2000
Es初步检索命令
相关推荐
Elasticsearch 批量导入数据1
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文