RestTemplate toasticsearch 6.7.0 search -> Неверный запрос - PullRequest
0 голосов
/ 27 июня 2019

Я пытаюсь получить доступ к эластичному поиску 6.7.0

(я не могу использовать эластичный клиент-отдых-высокий-уровень-клиент, потому что я уже использую его версию 7.1.0, я достиг 2 эластичных поисков с разнымиверсия)

, поэтому я создаю его с RestTemplate

, но получаю ошибку 400

 {"error":
   {"root_cause": 
 [{"type":"parse_exception","reason":"request body or source     parameter is  required"}],
 "type":"parse_exception","reason":"request body or source parameter     is required"},
"status":400}
}

это то, что я пытался

protected void findByRest(String identification) throws Exception {
        RestTemplate restTemplate = new RestTemplate();

        String url = "http://127.0.0.1:9200/_search/template";

        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);


        String json = "{\"source\":{\"size\":\"2000\",\"query\":{\"match\":{\"identification\":\"123456789\"}}}}";

        HttpEntity<String> requestEntity = new HttpEntity<>(json, headers);

        try {
            ResponseEntity<Object> response = restTemplate.exchange(url, HttpMethod.GET, requestEntity, Object.class);
        }catch (HttpClientErrorException e) {
            LOG.error("{}",e.getResponseBodyAsString());
            throw w;
        }
    }

этоработает нормально с curl

curl -X GET \
  http://127.0.0.1:9200/_search/template \
  -H 'Accept: */*' \
  -H 'Cache-Control: no-cache' \
  -H 'Connection: keep-alive' \
  -H 'Content-Type: application/json' \
  -H 'Host: 127.0.0.1:9200' \
  -H 'Postman-Token: 7d1e98f4-23ba-437b-95a7-ea8df9fac837,079e18f5-aaee-4b19-802b-ef4337eaf8c5' \
  -H 'User-Agent: PostmanRuntime/7.15.0' \
  -H 'accept-encoding: gzip, deflate' \
  -H 'cache-control: no-cache' \
  -H 'content-length: 80' \
  -d '{"source":{"size":"2000","query":{"match":{"identificacion":"132465789"}}}}'

есть какие-либо подсказки?

1 Ответ

0 голосов
/ 27 июня 2019

source должен быть параметром строки запроса , а не разделом в DSL вашего запроса. Но вы должны иметь возможность отправлять этот запрос, не отправляя его в строке запроса, что в любом случае является плохой практикой.

То, как я это делаю, выглядит следующим образом, и это работает довольно хорошо (т.е. используйте POST вместо GET, поскольку вы отправляете полезную нагрузку)

HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON_UTF8);
HttpEntity<String> requestEntity = new HttpEntity(payload.getBytes(Charset.defaultCharset()), headers);
ResponseEntity<String> response = this.restTemplate.postForEntity(url, requestEntity, String.class);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...