Мне было интересно, использовал ли кто-нибудь здесь RestHighLevelClient для подключения к AWS ElasticSearch. Не уверен, что AWS ElasticSearch поддерживает это. В настоящее время я получаю ConnectionClosedException каждый раз, когда пытаюсь подключиться.
Вот что у меня есть:
public SearchResponse getQuery(){
RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(new HttpHost("localhost", 4430, "http")));
SearchRequest searchRequest = new SearchRequest("msglog-dev-2018.05.21");
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(QueryBuilders.matchAllQuery());
searchRequest.source(searchSourceBuilder);
SearchResponse searchResponse = null;
try{
searchResponse =client.search(searchRequest);
}catch(IOException e){
e.printStackTrace();
}
return searchResponse;
}
и я получаю ошибку
org.apache.http.ConnectionClosedException: Connection closed
at org.apache.http.nio.protocol.HttpAsyncRequestExecutor.endOfInput(HttpAsyncRequestExecutor.java:347)
at org.apache.http.impl.nio.DefaultNHttpClientConnection.consumeInput(DefaultNHttpClientConnection.java:261)
at org.apache.http.impl.nio.client.InternalIODispatch.onInputReady(InternalIODispatch.java:81)
at org.apache.http.impl.nio.client.InternalIODispatch.onInputReady(InternalIODispatch.java:39)
...........
Да, мой ElasticSearch в настоящее время туннелируется к этому порту.




Да, мы используем RHLC с AWS. Вот пример, который поможет вам двигаться в правильном направлении. Это демонстрирует прямой вызов (который, вероятно, актуален для большего числа читателей), но его можно легко адаптировать к вашим потребностям в туннелировании, изменив настройки параметров соединения (хост, порт, протокол).
private static final String HOST = "your-es-endpoint.es.amazonaws.com";
private static final int PORT = 443;
private static final String PROTOCOL = "https";
private static final RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost(HOST, PORT, PROTOCOL)));
public static void getESDocs() {
try {
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.query(QueryBuilders.matchAllQuery()); // adjust search logic here
SearchRequest searchRequest = new SearchRequest("your-index-here");
searchRequest.source(sourceBuilder);
final SearchResponse searchResponse = client.search(searchRequest);
/* process results here... */
}
} catch (Exception e) {
/* handle connection/proc error here */
} finally {
client.close(); // example to release driver resource (see doc link)
}
}
Этот пример действует для версии 6.3.x (YMMV): Документация по API
полезно, просто добавьте RequestOptions.DEFAULT в client.search (searchRequest, RequestOptions.DEFAULT); для версии 6.7.x n выше
Куда поместить логин и пароль Elasticsearch на aws
Но вы подключаетесь к экземпляру localhost в своем коде ?!