ElasticSearch JSON文件导入(批量API)

时间:2015-08-10 20:02:00

标签: json elasticsearch file-import

我在StackOverflow上看到了一些类似的帖子,但是我还没有清楚地了解如何将带有JSON文档的大文件索引到ElasticSearch中;我收到如下错误:

{"error":"ActionRequestValidationException[Validation Failed: 1: index is missing;2: type is missing;]","status":400}

{"took":231,"errors":false,"items":[{"index":{"_index":"test","_type":"type1","_id":"1","_version":7,"status":200}}]

我有一个大小约为2Gb的JSON文件,这是我实际要导入的文件。但首先,为了理解Bulk API的工作原理,我创建了一个只包含一行实际数据的小文件:

testfile.json

{"index":{"_id":"someId"}} \n
{"id":"testing"}\n

我从SO的另一篇文章中得到了这个。我知道第一行是标题,我也理解"索引"在第一行是将要发送给ES的命令;但是,这仍然不起作用。有人可以给我一个工作示例并清楚说明如何将JSON文件导入ES吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

以下示例来自elasticsearch文档: https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-bulk.html?q=bulk

{ "index" : { "_index" : "test", "_type" : "type1", "_id" : "1" } }
{ "field1" : "value1" }
{ "delete" : { "_index" : "test", "_type" : "type1", "_id" : "2" } }
{ "create" : { "_index" : "test", "_type" : "type1", "_id" : "3" } }
{ "field1" : "value3" }
{ "update" : {"_id" : "1", "_type" : "type1", "_index" : "index1"} }
{ "doc" : {"field2" : "value2"} }

因此第一行告诉弹性将第二行的文档索引到索引测试中,用_id 1键入type1。它将使用field1索引文档。如果它们都转到相同的索引并键入,您可以更改URL。检查链接中的样品。

在第三行中,您会看到删除操作的示例,此文档不需要第四行的文档。

小心非常大的文件,2 Gb可能很大。它需要首先发送到弹性,然后将其加载到内存中。因此,要发送的记录数量有限制。