当前位置: 首页 > 知识库问答 >
问题:

spring数据ElasticSearch无法与ElasticSearch 5.5.0连接

翁翰
2023-03-14

我是ElasticSearch的新手...

非常喜欢API(特别是ElasticsearchTemplate&支持单元测试)...

使用ElasticSearch 5.5.0(以下链接内联了完整的代码,也可以作为可下载的zip文件提供)执行此示例:

https://www.mkyong.com/spring-boot/spring-boot--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引擎的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]    

有没有办法用spring数据ElasticSearch搭配ElasticSearch 5.5.0引擎?

如果是,将如何实现连接?

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

共有1个答案

邵弘伟
2023-03-14

spring boot 1.5.1不支持ElasticSearch 5.x(您提供的文章也说了)。为了能够使用ElasticSearch5.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'

这应该允许您使用所有的好东西的弹性搜索Java API和spring-数据-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'
}
 类似资料:
  • 我的Elasticsearch docker撰写文件就是这样 我有一个spring启动应用程序,application.properties是 然而,我得到了错误 问题:1)如何从外部连接到带Spring靴的elasticsearch?2) 如果docker将elastic和springboot应用程序组合在一起,它们将位于同一个网络上。要连接到弹性搜索,我应该对spring.data.elast

  • 我是ElasticSearch的新手,我遵循这里的说明:https://www.elastic.co/guide/en/elasticsearch/reference/current/docker.html 每当我运行“docker compose up”时,Kibana总是说“无法恢复连接”,但如果我运行curlhttp://localhost:9200,我会得到回复: 下面是我的docker

  • 我在docker中运行了elasticsearch 8.1,其中包含以下docker compose文件: 我正在尝试使用org.elasticsearch.client.RestClient向es集群发出一个简单的GET请求。 请求: Rest客户端初始化: 主要方法: buildClusterHosts()方法正确地构建了一个HttpHost数组(在本例中只有一个),并将其提供给rest客户端

  • 我正在使用Spring boot和AWS elasticsearch服务。AWS Elasticsearch服务,仅提供REST接口。 Elasticsearch Rest客户端在这里。 简单地说,是否可以将REST客户端与Spring Data Elasticsearch一起使用? 换句话说,Spring Data Elasticsearch是否与Elasticsearch Rest客户端配合使

  • 我试图在Spring MVC应用程序中配置ElasticSearch存储库。我使用Spring Data ElasticSearch版本:2.0.7和ElasticSearch Server 2.4.4。 我确信ElasticNode可以工作,下面是示例输出 这是我的测试配置 我得到的错误,应用程序无法连接到弹性节点,堆栈跟踪 我试图从1.7.1, 2.4.4和5.2.1更改弹性搜索节点的版本。没

  • 我试着用docker compose在Centos 8上运行ELK: 这是我的 但我面临着这个错误: {“类型”:“日志”,“时间戳”:“2020-03-03T22:53:19Z”,“标签”:[“警告”,“弹性搜索”,“管理],“pid”:1,“消息”:“无法恢复连接:http://elasticsearch:9200/"} 当我检查时: > elasticsearch运行良好。 工作正常。 ki