Javascript elasticsearch中的批量索引
我必须将JSON数组索引到弹性搜索索引中。我正在使用javascript客户端对数据进行索引 我循环数组并按如下所示编制索引:Javascript elasticsearch中的批量索引,javascript,json,elasticsearch,Javascript,Json,elasticsearch,我必须将JSON数组索引到弹性搜索索引中。我正在使用javascript客户端对数据进行索引 我循环数组并按如下所示编制索引: for (var i = 0; i < rawData.length; i++ ) { client.create({ index: "name", type: "rrrrr", body: rawData[i] }, function(error, response){ }); }
for (var i = 0; i < rawData.length; i++ ) {
client.create({
index: "name",
type: "rrrrr",
body: rawData[i]
}, function(error, response){
});
}
{ "index" : { "_index" : "test", "_type" : "type1", "_id" : "1" } }
但是在JSON数组中,我所拥有的不会包含这个头。所以无论如何,我也必须在这里循环。如果没有循环,我如何实现这一点。请分享您的想法。简短回答:批量API将无法帮助您实现这一点 批量API并不是为了减少代码为正确格式化数据而可能需要执行的循环次数,而是为了减少客户端和ES集群之间的数据传输。批量API允许您对N条记录进行1次调用(从客户端到服务器),而不是对每条记录进行1次调用,从而在集群端加快索引速度,但在客户端也加快了执行时间 也就是说,对于您提到的特定字段,BulkAPI确实允许您避免为每个要批量索引的记录指定此字段。在使用PHP API时,您可以设置
索引
和类型
一次,然后仅在原始数据上循环。以下是使用Elasticsearch PHP API的代码片段:
$esclient = // Set up an ES client here
$joined = '';
foreach($data as $q) {
$joined .= json_encode($q) . "\n";
}
$all_es_params = array();
$all_es_params['body'] = <<<EOT
$joined
EOT;
// Assumes all documents will be put in the same index
$all_es_params['index'] = 'YOUR_INDEX_NAME';
// Assumes all documents have same type in your bulk call
$all_es_params['type'] = 'YOU_DOCUMENT_TYPE';
try {
// Call ES BULK API
$ret = $esclient->bulk($all_es_params);
} catch (Exception $e) {
// Something went wrong
}
$esclient=//在此处设置ES客户端
$journed='';
foreach($q数据){
$JOIN.=json_编码($q)。“\n”;
}
$all_es_params=array();
$all_es_params['body']=能否详细说明为什么需要避免循环?您的意思是避免进行数百次潜在的create
调用,还是仅仅避免在所有rawData
元素上循环?@Val感谢您宝贵的时间。试图在我的程序中避免尽可能多的循环,以便代码有效。您能在问题中说明如何创建rawData
数组吗?@Val它只是一个mongoDB集合数组。