Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/475.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript elasticsearch中的批量索引_Javascript_Json_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch - Fatal编程技术网 elasticsearch,Javascript,Json,elasticsearch" /> elasticsearch,Javascript,Json,elasticsearch" />

Javascript elasticsearch中的批量索引

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){ }); }

我必须将JSON数组索引到弹性搜索索引中。我正在使用javascript客户端对数据进行索引

我循环数组并按如下所示编制索引:

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集合数组。