Spring Data ElasticSearch 无法与 ElasticSearch 5.5.0 连接



我是ElasticSearch的新手...

真的很喜欢API(特别是ElasticsearchTemplate和支持单元测试(...

使用 ElasticSearch 5.5.0 遵循此示例(以下链接包含内联的完整代码,也可作为可下载的 zip 文件提供(:

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

Maven 依赖项:

<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/主要/资源:

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

发出以下任一信息时:

mvn spring-boot:run

mvn clean test

标准输出:

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)

另外,在我的 ElasticSearch 5.5.0 引擎的标准输出中获取以下内容:

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

有没有办法将Spring Data ElasticSearch与ElasticSearch 5.5.0引擎一起使用?

如果是这样,如何实现连接?

我正在使用弹性搜索提供的弹性搜索Java客户端,并且能够在ElasticSearch 5.5.0上连接和创建索引,但真的希望我可以使用这个库的强大功能。

Spring Boot 1.5.1不支持ElasticSearch 5.x(你提供的文章也这么说(。为了能够使用 ElasticSearch 5.x,您需要使用 Spring Boot 2 的里程碑。

尝试使用以下依赖项配置项目:

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

这应该允许你使用Elasticsearch Java API和spring-data-elasticsearch的所有优点。

更新:基本 Gradle (v4.0.1( 配置如下所示(build.gradle文件(:

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

最新更新