导入json数据到Elasticsearch(bulk方法)

一、前言

      在前面几章,基本把本地的环境给配置好了,那么配置好了之后,要做的第一件事当然就是导入数据进去。我这边准备的是一份json数据,这里通过ES的bulk API给导入进去。

二、导入数据

1、批量导入的话使用bulk API,形如:

curl -H "Content-Type: application/x-ndjson"  -s -XPOST "localhost:9200/_bulk?pretty&refresh" --data-binary "@E:\files\es_zeusa.evony.com.accesslog\test.json"

      我这里没有明确指定indextype的值,因为我的数据中已经包含indextype,所以不在url中指定也可以。指定的话,格式是:

{index}/{type}/_bulk
pretty:pretty是将返回的信息以可读的JSON形式返回

2、报错

"error" : {
"root_cause" : [
  {
    "type" : "illegal_argument_exception",
    "reason" : "Malformed action/metadata line [1], expected START_OBJECT or END_OBJECT but found [VALUE_STRING]"
  }

百度了一下,说是导入的json数据没有id的问题,但问题是,我有id的。导入的js文件类似于:

{"_index":"xxx","_type":"doc","_id":"OCCZwwB18T8lllql35ykE","_score":1,"_source":{"fields":{"service":"zeusa.evony.com.accesslog"}}

有id的,只不过这个id不是自增长的id,是ES自动生成的id,没道理啊。

3、参照bulk的文档:

https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-bulk.html

action_and_meta_data \ n
optional_source \ n
action_and_meta_data \ n
optional_source \ n

这是标准格式,action可以是indexcreatedelete,和update
option是相关参数属性

修改格式形如:

{"index":{"_index":"xxx","_type":"doc","_id":"OCCxxxxxxxxxxxx5ykE"}}
{"doc":{"_score":1,"_source":{"fields":{"service":"xxxx"}}

百度一下,看到很多人导入的格式是类似于这样的,给json文件一个顶级对象,严格安装bulk API的要求。

4、继续导入,报错:

 "error" : {
"root_cause" : [
  {
    "type" : "illegal_argument_exception",
    "reason" : "The bulk request must be terminated by a newline [\n]"
  }
]}

      这个错误比较明显,是没加换行符。需要在json文件的结尾加个换行符,也就是按一下enter,切换到下一行。重新输入:

"took" : 114,
  "errors" : false,
  "items" : [
    {
      "index" : {
        "_index" : "xxx",
        "_type" : "doc",
        "_id" : "xxxx",
        "_version" : 3,
        "result" : "updated",
        "forced_refresh" : true,
        "_shards" : {
          "total" : 2,
          "successful" : 1,
          "failed" : 0
        },
        "_seq_no" : 3,
        "_primary_term" : 1,
        "status" : 200    
      }
    }]

      导入成功。这里注意下status的值,第一次插入的时候,显示status201,不过还是可以查询到已经导入的数据。第二次导入的时候,因为已经存在这个数据了,所以status200。这里可以看到我的version3,代表我这是第三次导入了,纯粹为了测试,哈哈。

      需要注意的是,bulk导入数据量是有限的,貌似是100M是默认的上限,所以对于大数据量来说,使用logstash导入更为合适(这里不讨论filebeat相关,仅为引出下一篇文章),因此下一篇将介绍使用logstash导入大量数据,以避免再遇到这种错误情况。
链接: logstash导入数据到Elasticsearch

end

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
要将JSON数据导入Kibana,可以按照以下步骤进行操作: 1. 确保你已经安装并启动了Kibana。如果还没有安装,你可以从Elasticsearch官网下载适合你系统的版本。 2. 将你的JSON数据保存为一个文件,确保数据的格式符合Kibana的要求。 3. 打开Kibana的网页界面,在左侧导航栏中选择"Management"(管理)。 4. 在管理页面中,选择"Kibana",然后选择"Index Patterns"(索引模式)。 5. 点击"Create index pattern"(创建索引模式)按钮。 6. 在"Index pattern"字段中输入你想要的索引模式名称,例如"mydata"。 7. 在"Step 2 of 2: Define index pattern"(第二步:定义索引模式)页面,选择你的时间字段(如果有的话),然后点击"Create index pattern"(创建索引模式)按钮。 8. 返回管理页面,在左侧导航栏中选择"Dev Tools"(开发工具)。 9. 在开发工具页面的控制台中,输入以下命令来导入JSON数据: ``` PUT /mydata/_bulk { "index": { "_index": "mydata", "_type": "_doc" } } { "field1": "value1", "field2": "value2" } { "index": { "_index": "mydata", "_type": "_doc" } } { "field1": "value3", "field2": "value4" } ... ``` 请将上述命令中的"mydata"替换为你在步骤6中定义的索引模式名称,并按照你的数据格式修改字段名和字段值。 10. 执行上述命令后,你的JSON数据就会被导入到Kibana中的相应索引模式中。 请注意,以上步骤仅提供了一种基本的导入JSON数据方法,实际操作中可能会根据具体情况有所不同。如果你遇到任何问题,请参考Kibana的官方文档或寻求相关支持。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [地区的json数据_肺炎病毒疫情数据爬取](https://blog.csdn.net/weixin_39798497/article/details/111113036)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [Python可视化学习——使用JSON进行数据转换、pyecharts模块调用以及可视化案例的介绍(可视化案例数据暂无...](https://blog.csdn.net/Williamtym/article/details/130438123)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

铁柱同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值