Spring Data ElasticSearch Can't Connect with ElasticSearch 5.5.0


#1

Am new to ElasticSearch...

Really love the API (especially ElasticsearchTemplate & supporting Unit Tests)...

Was following this example using ElasticSearch 5.5.0 (the following link has the full code inline and also available as a downloadable zip file):

https://www.mkyong.com/spring-boot/spring-boot-spring-data-elasticsearch-example/

maven dependencies:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.1.RELEASE</version>
</parent>

<properties>
    <java.version>1.8</java.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

EsConfig:

@Configuration
@EnableElasticsearchRepositories(basePackages = "com.mkyong.book.repository")
public class EsConfig {

    @Value("${elasticsearch.host}")
    private String EsHost;

    @Value("${elasticsearch.port}")
    private int EsPort;

    @Value("${elasticsearch.clustername}")
    private String EsClusterName;

    @Bean
    public Client client() throws Exception {

        Settings esSettings = Settings.settingsBuilder()
                .put("cluster.name", EsClusterName)
                .build();

        //https://www.elastic.co/guide/en/elasticsearch/guide/current/_transport_client_versus_node_client.html
        return TransportClient.builder()
                .settings(esSettings)
                .build()
                .addTransportAddress(
                  new InetSocketTransportAddress(InetAddress.getByName(EsHost), EsPort));
    }

    @Bean
    public ElasticsearchOperations elasticsearchTemplate() throws Exception {
        return new ElasticsearchTemplate(client());
    }
}

src/main/resources:

elasticsearch.clustername = mkyong-cluster
elasticsearch.host = localhost
elasticsearch.port = 9300

When issuing the following, either:

mvn spring-boot:run

or

mvn clean test

stdout:

Caused by: NoNodeAvailableException[None of the configured nodes are available: [{#transport#-1}{127.0.0.1}{127.0.0.1:9300}]]
   at org.elasticsearch.client.transport.TransportClientNodesService.ensureNodesAreAvailable(TransportClientNodesService.java:326)
   at org.elasticsearch.client.transport.TransportClientNodesService.execute(TransportClientNodesService.java:223)
   at org.elasticsearch.client.transport.support.TransportProxyClient.execute(TransportProxyClient.java:55)

Also, get the following in my ElasticSearch 5.5.0 engine's stdout:

[2017-07-23T02:48:46,135][WARN ][o.e.t.n.Netty4Transport  ] [vY7jxpr] exception caught on transport layer [[id: 0xa7e950be, L:/127.0.0.1:9300 - R:/127.0.0.1:60190]], closing connection
    java.lang.IllegalStateException: Received message from unsupported version: [1.0.0] minimal compatible version is: [5.0.0]
        at org.elasticsearch.transport.TcpTransport.messageReceived(TcpTransport.java:1379) ~[elasticsearch-5.5.0.jar:5.5.0]
        at org.elasticsearch.transport.netty4.Netty4MessageChannelHandler.channelRead(Netty4MessageChannelHandler.java:74) ~[transport-netty4-5.5.0.jar:5.5.0]    

Is there any way to use Spring Data ElasticSearch with ElasticSearch 5.5.0 engine?

If so, how would the connection be implemented?

I am using the Elastic Search Java client provided by Elastic Search and am able to connect and create indices on ElasticSearch 5.5.0 but really wish I could use the power of this library.


(Imteyaz Ahmad) #2

The Spring boot 1.5.1.RELEASE does not support ElasticSearch 5.x. Please refer the following link for the supported version of ES.

http://docs.spring.io/spring-boot/docs/1.5.1.RELEASE/reference/html/appendix-dependency-versions.html

Moreover, If you are starting fresh, then it's better to use Java REST client. Here is a blog that
https://www.elastic.co/blog/state-of-the-official-elasticsearch-java-clients that talks about different clients.

The following examples shows how to use ES Java rest client with Spring boot.


#3

According to the same question I posted on Stack Overflow:

Spring Boot 1.5.1 does not support ElasticSearch 5.x (the article you provided also says it). To make it possible to work with ElasticSearch 5.x you need to use a milestone of Spring Boot 2.

Try to configure your project with following dependencies:

spring boot

compile 'org.springframework.boot:spring-boot:2.0.0.M2'

elasticsearch

compile 'org.elasticsearch:elasticsearch:5.5.0'
compile 'org.elasticsearch.client:transport:5.5.0'

spring-data-elasticsearch for spring boot

compile 'org.springframework.boot:spring-boot-starter-data-elasticsearch:2.0.0.M2'
This should allow you to use all the goodies of Elasticsearch Java API ans spring-data-elasticsearch.

Is this true? However, I am a maven person so if this is true, can someone send me an example pom.xml that resembles the dependencies (including repositories) for the milestones?


(system) #4

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.