我在 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/