The msearch request must be terminated by a newline

Hello

I've been stuck on this problem

Basically I have a curl POST request that works when it's written directly on a terminal, but whenever I try to do it in a script, I get this error

$data_string = '{"index":["tracker"],"ignore_unavailable":true,"preference":1533127804501}{"size":0,"_source":{"excludes":[]},"aggs":{"2":{"terms":{"field":"brand.name.keyword","size":500,"order":{"_count":"desc"}},"aggs":{"3":{"terms":{"field":"trackerType.keyword","size":50,"order":{"_count":"desc"}}}}}},"stored_fields":["*"],"script_fields":{},"docvalue_fields":["date"],"query":{"bool":{"must":[{"match_all":{}},{"range":{"date":{"gte":1533041405943,"lte":1533127805943,"format":"epoch_millis"}}}],"filter":[],"should":[],"must_not":[]}}}';

I've tried putting newlines everywhere (first at the logic places, then I slowly became paranoid about everything and re-evaluated my existence)

But I still end up with this error

{"error":{"root_cause":[{"type":"illegal_argument_exception","reason":"The msearch request must be terminated by a newline [\n]"}],"type":"illegal_argument_exception","reason":"The msearch request must be terminated by a newline [\n]"},"status":400}

Please send help

Hey,

it is impossible to take a look at the request you actually sent to elasticsearch, so this is super hard to debug. The error message says, that the last character of your msearch body should be a new line. Is this the case?

--Alex

Hello!

I actually had it working this morning, all I did (even tho I'm pretty sure I've tried that yesterday) is add two \n in the json request

$data_string = '{"index":["tracker"],"ignore_unavailable":true,"preference":1533127804501}'."\n".'{"size":0,"_source":{"excludes":[]},"aggs":{"2":{"terms":{"field":"brand.name.keyword","size":500,"order":{"_count":"desc"}},"aggs":{"3":{"terms":{"field":"trackerType.keyword","size":50,"order":{"_count":"desc"}}}}}},"stored_fields":["*"],"script_fields":{},"docvalue_fields":["date"],"query":{"bool":{"must":[{"match_all":{}},{"range":{"date":{"gte":'.$newRapport.',"lte":'.($newRapport += 86400000).',"format":"epoch_millis"}}}],"filter":[],"should":[],"must_not":[]}}}'."\n";

Elastic search sure has a strange formatting

Same reasons the Post Office expect you to put letters in envelopes - they're quicker to sort and distribute if the distributor only deals with the routing information and they don't have to parse the details of the letter contents.