spring-data-elasticsearch - 在 ElasticSearch 中获取错误

标签 spring-data-elasticsearch

我在 springboot 中使用 ElasticSearch-5.2.1 并在 elasticsearch.bat 中出现以下错误

java.lang.IllegalStateException: Received message from unsupported version: [2.0.0] minimal compatible version is: [5.0.0]

并且在我的应用程序控制台中出现以下错误:

Caused by: org.elasticsearch.client.transport.NoNodeAvailableException: None of the configured nodes are available: [{#transport#-1}{127.0.0.1}{127.0.0.1:9300}]

当我在 google 中搜索时,它要求升级传输客户端,但是如何将传输客户端从 2.0 升级到 5.0

下面是我的配置代码:

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

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

@Value("${elasticsearch.host}") 私有(private)字符串 EsHost;

 @Bean
public Client client() throws Exception {

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


    return TransportClient.builder()
            .settings(esSettings)
            .build()
            .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(EsHost), EsPort));
}

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

最佳答案

确保弹性集群已启动: 点击网址 http://localhost:9200在浏览器中。 它应该给出类似于下面的内容:

    {
  "name" : "JXfjbaL",
  "cluster_name" : "docker-cluster",
  "cluster_uuid" : "7XzGYbE8QkGCMRwbqEriJw",
  "version" : {
    "number" : "5.5.3",
    "build_hash" : "9305a5e",
    "build_date" : "2017-09-07T15:56:59.599Z",
    "build_snapshot" : false,
    "lucene_version" : "6.6.0"
  },
  "tagline" : "You Know, for Search"
}

在您的 application.properties 中添加“cluster_name”值作为“elasticsearch.clustername”: application.properties 中的示例值:

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

为确保传输客户端在您的 Elasticsearch 中启动并运行,请从终端执行以下命令:curl -XGET http://localhost:9300 这应该给你以下回复: “这不是 HTTP 端口”

(如果你在 windows 上,请安装 curl)

这意味着您的集群已启动并正在运行。

在您的 pom.xml 中添加以下依赖项:

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

这应该为您的 spring 项目获取正确的 spring 数据弹性依赖。 将您的运输客户声明更改为以下使用的声明:

  TransportClient client = new PreBuiltTransportClient(esSettings)
            .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(EsHost), EsPort));

以上配置应该可以正常工作。 如果您正在通过 docker 运行 Elasticsearch 。然后确保运行 docker 镜像的命令如下所示。这会处理主机映射并禁用 xpack 安全性。

docker run -p 9200:9200 -p 9300:9300 -e "http.host=0.0.0.0" -e "transport.host=0.0.0.0" -e "xpack.security.enabled=false" docker.elastic.co/elasticsearch/elasticsearch:5.5.3

关于spring-data-elasticsearch - 在 ElasticSearch 中获取错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45462126/

相关文章:

spring - 在测试上下文 xml 中定义 ElasticsearchIntegrationTest 客户端

java - 在嵌套对象集合中搜索

java - 无法从TemporalAccessor获取即时消息:{},ISO解析为java.time.format.Parsed类型的2018-01-01

elasticsearch - SpringData(4.x)Elastic无法正确序列化实体

elasticsearch - Elasticsearch 的 @Setting 注解在 Spring Boot 中被忽略

elasticsearch - 如何将单个文档保存到Elasticsearch索引?

java - 未找到索引异常

java - 映射异常 : Couldn't find PersistentEntity while implementing AbstractElasticsearchConfiguration

java - 在属性文件中的 elasticsearch 中指定索引名称和索引类型

spring - 无法将自定义自动配置与 spring-data-elasticsearch 一起使用