【问题标题】:How to import JSON file to ElasticSearch 6.x?如何将 JSON 文件导入 ElasticSearch 6.x?
【发布时间】:2017-12-22 19:46:12
【问题描述】:

我在 CentOS7 主机的端口 9200 上运行了全新的 Elastic Search 6.1.1 空安装。我有这个“es.json”文件,其中包含准备好插入到 ES 中的数据样本。

我还有一个日志文件,其中每一行都是一个 json 块。我可以使用两者来填充我的 ES 数据库。

如何将这些数据和其他数据插入 ES?

我没有在文档和互联网上找到很好的解释。由于某种原因,文档并没有说得很清楚

【问题讨论】:

  • 我很确定你必须为你拥有的每个数据集创建一个索引,因为 ES 6 中的索引现在只能有一个映射类型。您是否创建了索引?
  • 查看IndexBulk API。还要考虑是定义映射还是让ES为你生成dynamic mappings。如果您将来需要更改映射,您可以随时使用Reindex API。

标签: http curl elasticsearch elasticsearch-6


【解决方案1】:

使用curl 中的--data-binary 标志从JSON 文件批量导入。

curl -H 'Content-Type: application/x-ndjson' -XPOST 'localhost:9200/{index}/{type}/_bulk?pretty' --data-binary @es.json

数据可以发布到端点之一 - /_bulk/{index}/_bulk{index}/{type}/_bulk。当提供 {index}{index}/{type} 时,它们将默认用于未明确提供它们的批量项目。

Content-Type: application/x-ndjson 代表以换行符分隔的 JSON。

在导入 JSON 文件之前,您可能需要 define mappings yourself 或在导入期间让 Elasticsearch generate mappings dynamically。如果您不希望 Elasticsearch 在导入过程中动态生成映射,请参考this doc 自行定义映射。

参考资料:

【讨论】:

  • 答案中给出了 URL (localhost:9200/{index}/{type}/_bulk?pretty)。将 {index}{type} 替换为所需的值。例如:localhost:9200/my_index/my_type/_bulk?pretty
【解决方案2】:

您可以使用 elasticsearch_loader 将 json 文件加载到 elasticsearch(2.X、5.X、6.X)中。

你可以用pip下载:

pip install elasticsearch-loader

然后您将能够通过发出以下命令将 json 文件加载到 elasticsearch 中:

elasticsearch_loader --index incidents --type incident json file1.json file2.json

免责声明:我是 elasticsearch_loader 的作者

【讨论】:

    猜你喜欢
    • 2021-12-27
    • 1970-01-01
    • 1970-01-01
    • 2013-04-02
    • 2016-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多