1

Am neu Elasticsearch ...Spring Data Elasticsearch kann keine Verbindung mit Elasticsearch 5.5.0

Wirklich lieben die API (insbesondere ElasticsearchTemplate & unterstützt Unit-Tests) ...

wurde im Anschluss an dieses Beispiel unter Verwendung von Elasticsearch 5.5.0 (der folgende Link hat die vollen Inline-Code und auch als herunterladbare ZIP-Datei):

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

maven Abhängigkeiten:

<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 

Wenn die folgende Ausgabe, entweder:

mvn spring-boot:run 

oder

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) 

Auch stdout folgendes erhalten sie in meinem Elasticsearch 5.5.0 Motor:

[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]  

Gibt es eine Möglichkeit Spring Data Elasticsearch mit Elasticsearch 5.5.0 Motor zu benutzen?

Wenn ja, wie würde die Verbindung implementiert werden?

Ich benutze den Elastic Search Java Client von Elastic Search und bin in der Lage, Indizes auf ElasticSearch 5.5.0 zu verbinden und zu erstellen, aber ich wünschte wirklich, ich könnte die Macht dieser Bibliothek nutzen.

Antwort

1

Spring Boot 1.5.1 unterstützt nicht ElasticSearch 5.x (der Artikel, den Sie angegeben haben, sagt es auch). Um es zu ermöglichen mit Elasticsearch 5.x arbeiten müssen Sie einen Meilenstein des Frühlings-Boot 2.

Versuchen verwenden, um Ihr Projekt mit folgenden Abhängigkeiten zu konfigurieren:

# 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' 

Diese erlauben sollten Sie alle verwenden die Goodies von Elasticsearch Java API und spring-data-elasticsearch.

Update: Grund Gradle (v4.0.1) Konfiguration wie (build.gradle Datei) aussehen:

buildscript { 
    ext { 
     springBootVersion = '2.0.0.M2' 
    } 
    repositories { 
     mavenCentral() 
     maven { url 'https://repo.spring.io/libs-snapshot' } 
     maven { url 'http://repo.spring.io/milestone/' } 
    } 
    dependencies { 
     classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") 
    } 
} 

sourceCompatibility = 1.8 
targetCompatibility = 1.8 

apply plugin: 'java-library' 
apply plugin: 'org.springframework.boot' 
apply plugin: 'io.spring.dependency-management' 

jar { 
    baseName = 'elastic' 
    version = '0.0.1' 
} 

repositories { 
    mavenCentral() 
    jcenter() 
    maven { url 'https://repo.spring.io/libs-snapshot' } 
    maven { url 'http://repo.spring.io/milestone/' } 
} 

dependencies { 
    compile 'org.springframework.boot:spring-boot-starter-web' 
    compile 'org.springframework.boot:spring-boot-starter-logging' 

    compile 'org.springframework.boot:spring-boot-starter-data-elasticsearch' 

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

    compile 'com.google.guava:guava:20.0' 

    testCompile 'junit:junit:4.12' 
} 
+0

Thank you very much! Das ist eine gute Nachricht, aber ich weiß nicht, wie ich das mit meinem Maven pom.xml konfigurieren soll ... Außerdem kann ich nicht finden, wo Spring Spring 1.5.1 in ElasticSearch 5.x fehlt . Unterstützung. –

+0

Am Anfang des Artikels gibt es einen ** Note ** Abschnitt: 'SpringBoot 1.5.1.RELEASE und Spring Data Elasticsearch 2.10.RELEASE unterstützt nur ElasticSearch 2.4.0.Sie unterstützen nicht die neueste Version von ElasticSearch 5.x Version ... 'Ich verwende hauptsächlich Gradle für das Abhängigkeitsmanagement - Ich habe meine Antwort mit der Konfiguration aktualisiert, so dass es einfacher ist, sie in maven pom zu übersetzen. Ich empfehle https://start.spring.io/ für die Generierung von Starter der Pom-Datei - es generiert auch die richtigen Repositories für Meilensteine, da sie nicht in Cental Repository vorhanden sind. – Joanna

Verwandte Themen