Elasticsearch批量导入.
我需要将产品作为单个项目导入.
我有一个类似于以下内容的json文件:
{
"Products":[
{
"Title":"Product 1",
"Description":"Product 1 Description",
"Size":"Small",
"Location":[
{
"url":"website.com",
"price":"9.99",
"anchor":"Prodcut 1"
}
],
"Images":[
{
"url":"product1.jpg"
}
],
"Slug":"prodcut1"
},
{
"Title":"Product 2",
"Description":"Prodcut 2 Desctiption",
"Size":"large",
"Location":[
{
"url":"website2.com",
"price":"99.94",
"anchor":"Product 2"
},
{
"url":"website3.com",
"price":"79.95",
"anchor":"discount product 2"
}
],
"Images":[
{
"url":"image.jpg"
},
{
"url":"image2.jpg"
}
],
"Slug":"product2"
}
]
}
Run Code Online (Sandbox Code Playgroud)
我试过以下(我是新手):
curl -s -XPOST 'http://localhost:9200/_bulk' --data-binary @products.json
curl -s -XPOST 'http://localhost:9200/_bulk' -d @products.json
curl -XPOST http://localhost:9200/cp/products -d "@products.json"
curl -XPOST http://localhost:9200/products -d "@products.json"
Run Code Online (Sandbox Code Playgroud)
有些人给出了其他人没有的错误.我需要做什么?
Pai*_*ook 27
遵循批量API文档.您需要使用非常具体格式的文件提供批量操作:
注意:最后一行数据必须以换行符\n结尾.
可能的操作是索引,创建,删除和更新.index和create期望下一行的源,并且具有与标准索引API的op_type参数相同的语义(即,如果已经存在具有相同索引和类型的文档,则create将失败,而index将添加或替换文档有必要的).delete不期望下一行中的源,并且具有与标准删除API相同的语义.update期望在下一行指定部分doc,upsert和script及其选项.
如果要为curl提供文本文件输入,则必须使用--data-binary标志而不是plain -d.后者不保留换行符.
因此,您需要将products.json文件的内容更改为以下内容:
{"index":{"_index":"cp", "_type":"products", "_id": "1"}}
{ "Title":"Product 1", "Description":"Product 1 Description", "Size":"Small", "Location":[{"url":"website.com", "price":"9.99", "anchor":"Prodcut 1"}],"Images":[{ "url":"product1.jpg"}],"Slug":"prodcut1"}
{"index":{"_index":"cp", "_type":"products", "_id":"2"}}
{"Title":"Product 2", "Description":"Prodcut 2 Desctiption", "Size":"large","Location":[{"url":"website2.com", "price":"99.94","anchor":"Product 2"},{"url":"website3.com","price":"79.95","anchor":"discount product 2"}],"Images":[{"url":"image.jpg"},{"url":"image2.jpg"}],"Slug":"product2"}
Run Code Online (Sandbox Code Playgroud)
并确保--data-binary在你的curl命令中使用(就像你的第一个命令).另请注意,如果使用索引并键入特定端点index,type则可以省略.你的/cp/products就像你的第三个卷曲命令.
这很快并且对我在一组 JSON 对象上工作。
cat data.json | \
jq -c '.[] | .id = ._id | del (._id) | {"index": {"_index": "profiles", "_type": "gps", "_id": .id}}, .' |\
curl -XPOST 127.0.0.1:9200/_bulk --data-binary @-
Run Code Online (Sandbox Code Playgroud)
我不得不复制和删除该_id字段,因为导入引发了一个错误(字段 [_id] 是一个元数据字段,不能添加到文档中。使用索引 API 请求参数。)如果它没有重命名。大多数数据不太可能有一个_id字段,在这种情况下这部分应该被省略。
这要归功于凯文马什
| 归档时间: |
|
| 查看次数: |
51496 次 |
| 最近记录: |