Elasticsearch Rest Client with Spring Data Elasticsearch

廉价感情. 提交于 2019-11-30 11:50:11

[2019 February Update]

A see now that 3.2.0 M1 Spring Data Elasticsearch supports the HTTP client (https://docs.spring.io/spring-data/elasticsearch/docs/3.2.0.M1/reference/html/#reference)

According to the documentation (it could of course change because it's not final version so I will put it here):

The well known TransportClient is deprecated as of Elasticsearch 7.0.0 and is expected to be removed in Elasticsearch 8.0.

2.1. High Level REST Client

The Java High Level REST Client provides a straight forward replacement for the TransportClient as it accepts and returns the very same request/response objects and therefore depends on the Elasticsearch core project. Asynchronous calls are operated upon a client managed thread pool and require a callback to be notified when the request is done.

Example 49. High Level REST Client

static class Config {

  @Bean
  RestHighLevelClient client() {

    ClientConfiguration clientConfiguration = ClientConfiguration.builder() 
      .connectedTo("localhost:9200", "localhost:9201")
      .build();

    return RestClients.create(clientConfiguration).rest(); 
  }
}

// ...

IndexRequest request = new IndexRequest("spring-data", "elasticsearch", randomID())
  .source(singletonMap("feature", "high-level-rest-client"))
  .setRefreshPolicy(IMMEDIATE);

IndexResponse response = client.index(request);

[Original answer]

Currently Spring Data Elasticsearch doesn't support the communication by the REST API. They are using the transport client.

There is separate fork of Spring Data Elasticsearch (the guy needed it for AWS the same as you) where the JEST library is used and communication is made by REST:

https://github.com/VanRoy/spring-data-jest

You will find the interesting discussion under the following ticked of Spring Data Elasticsearch:

https://jira.spring.io/browse/DATAES-220

I think the Spring Data Elasticseach will need to migrate to REST on the future according to the statements from Elasticsearch team that they are planning to support only HTTP communication for ES.

Hope it helps.

I think jest client for elasticsearch will serve your purpose. https://github.com/searchbox-io/Jest/tree/master/jest. Jest is a Java HTTP Rest client for ElasticSearch. It has a very good documentation too and have support for all queries in elasticsearch.

Atanas Rusenov

Can't comment on Przemek Nowak's answer above. If you don't want to wait for Spring Data ES 2.2.x to use the High Level Rest Client, then Spring Data Jest saves the day.

As per their documentation, you first disable the default Spring Data ES autoconfiguration:

@SpringBootApplication(exclude = {
    ElasticsearchAutoConfiguration.class, 
    ElasticsearchDataAutoConfiguration.class
})

And that's it - the repositories will now use Jest's implementation. And if you'd like to use the ElasticsearchTemplate, make sure you inject ElasticsearchOperations interface instead:

private final ElasticsearchOperations esTemplate;
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!