我正在尝试将600MB Json文件(将来可能会扩大)插入elasticsearch。 但是,我遇到了以下错误,
Error: "toString()" failed
我正在使用stream-json npm但没有运气:( 做这个的最好方式是什么? 我正在考虑分块,但是如果有更好的方法,那将很棒
var makeBulk = function(csList, callback){
const pipeline = fs.createReadStream('./CombinedServices_IBC.json').pipe(StreamValues.withParser());
while()
pipeline.on('data', data => {
for(var index in data.value.features){
bulk.push(
{ index: {_index: 'combinedservices1', _type: '_doc', _id: data.value.features[index].properties.OBJECTID } },
{
'geometry': data.value.features[index].geometry,
'properties': data.value.features[index].properties
}
);
}
callback(bulk);
});
}
答案 0 :(得分:0)
有一个用于这种用例的工具Elasticdump(https://github.com/taskrabbit/elasticsearch-dump)
安装elasticsearch-dump
npm install elasticdump -g
elasticdump
将Json导入ES
elasticdump \
--input=./CombinedServices_IBC.json \
--output=http://127.0.0.1:9200/my_index \
--type=alias
答案 1 :(得分:0)
不要插入600MB的空间,默认bulk queue最多可以保留200个inn JVM Heap Space的空间-假设每个空间都是600MB,那么您将得到OOM和GC问题
请参阅https://www.elastic.co/guide/en/elasticsearch/guide/current/bulk.html#_how_big_is_too_big;示例logstash elasticsearch输出插件最多发送20Mb