Я пытаюсь сделать сообщение в API-интерфейс эластичного поиска.
Мне нужно выполнить многопоточность, потому что мне нужно выполнять запросы по многим индексам.
Я использую Java8 + resttemplate для этого.
См. Код ниже:
StringBuilder sb = new StringBuilder();
sb.append("{\"index\" : \"indexname\", \"type\": \"typename\"}");
sb.append("{\"query\" : {\"match_all\" : {}}, \"from\" : 0, \"size\" : 10}");
sb.append("{\"index\" : \"indexname\", \"type\": \"typename\"}");
sb.append("{\"query\" : {\"match_all\" : {}}}\n");
String query = sb.toString();
String fullURL = "http://esHost/_msearch";
log.debug("URL to search: {}.", fullURL);
log.info(">>>>" + query);
HttpHeaders headers = new HttpHeaders();
headers.add("Content-Type", "application/x-ndjson");
HttpEntity<String> request = new HttpEntity<>(query, headers);
Map map = restTemplate.postForObject(fullURL, request, Map.class);
...
Когда я делаю один и тот же запрос к тому же хосту, используя CURLS, это нормально, но с помощью Java я не могу.
Смотрите ошибку:
{"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}
Я прочитал, что JSON нужен \ n, \ r, я пробовал любые возможности, но не работает.
Как мне построить «значение запроса» для отправки для _msearch API?