ElasticsearchのクライアントとしてSpring Framework RestTemplateを使用する際に引っかかったので以下の点に注意です。
HttpHeaders headers = new HttpHeaders();
headers.setContentType(new MediaType("application", "json", Charset.forName("utf-8")));
String q = "{\"query\":" + [クエリ] +"}";
HttpEntity<String> entity = new HttpEntity<String>(q, headers);
HttpEntity<String> result = restTemplate.exchange([URL], HttpMethod.POST, entity, String.class);
以下のようにHttpEntityでString型を指定した場合
HttpEntity<String> entity = new HttpEntity<String>(q, headers);
以下のようにヘッダにContentsTypeを指定しなければElasticsearchがエラーとしてHTTPステータスコード406 Not Acceptableを返却します。
headers.setContentType(new MediaType("application", "json", Charset.forName("utf-8")));