【发布时间】:2016-10-08 14:55:48
【问题描述】:
我正在尝试向 ElasticSearch 执行 php CURL 请求以一次索引多个条目(使用 _bulk),但我总是根据请求正文收到不同的错误
> $posted = '';
> for ($i = 0; $i < 10; $i++) {
> $posted .= json_encode(array(
> 'index' => new stdClass(),
> )) .'\n';
>
> $posted .= json_encode(array(
> 'id' => $i,
> 'name' => 'XX' . $i,
> ));
>
> if($i < 9){
> $posted .'\n';
> }
> }
>
> $fullURL = 'http://127.0.0.1:9200/myindex/mytype/_bulk';
> $conn = curl_init($fullURL);
>
> curl_setopt($conn, CURLOPT_RETURNTRANSFER, true);
> curl_setopt($conn, CURLOPT_SSL_VERIFYPEER, false);
> curl_setopt($conn, CURLOPT_SSL_VERIFYHOST, false);
> curl_setopt($conn, CURLOPT_FAILONERROR, false);
> curl_setopt($conn, CURLOPT_CUSTOMREQUEST, 'POST');
> curl_setopt($conn, CURLOPT_POSTFIELDS, $posted);
> $res = curl_exec($conn);
> echo $res;
使用上面的参数字符串我得到这个错误:
"error":{"root_cause":[{"type":"action_request_validation_exception","reason":"验证失败:1:没有添加请求;"}],"type":"action_request_validation_exception","reason ":"验证失败:1:未添加请求;"},"status":400}
我已经用 JSON 编码的单个请求对其进行了测试,它工作正常。
那么,如何使用 php curl 执行 _bulk 索引?
编辑: --- 为提高可读性而编辑,请参阅下面的答案。我尝试了我在网上找到的所有内容 2 天,希望对其他人有所帮助。
【问题讨论】:
标签: php curl elasticsearch