I am trying to perform a php CURL request to ElasticSearch to index several entries at a time (with _bulk), but I always get a different error based on the request body
> $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;
with the above param string I get this error:
"error":{"root_cause":[{"type":"action_request_validation_exception","reason":"Validation Failed: 1: no requests added;"}],"type":"action_request_validation_exception","reason":"Validation Failed: 1: no requests added;"},"status":400}
I have tested it with single requests encoded in JSON and it works fine.
So, how can I perform _bulk indexing with php curl?
EDIT: --- Edited for more readability, see the answer below. I tried everything I found on the web for 2 days, hope it helps someone else.