java - 使用最近的客户端 RestHighLevelClient 7.12.1 调用旧版本 ElasticSearch exp :6.8.8
问题描述
从最近的 ES 客户端 exp spring boot 2.5.0 调用 elasticSearch 6.8.8 时出现此错误
Root mapping definition has unsupported parameters: [_class : {index=false, type=keyword, doc_values=false}]]
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.0</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
这是我唯一的索引文件:
@Document(indexName = "my_index")
public class MyDocument implements Serializable {
@Id
private String id;
private String name;
}
弹性配置:
@Configuration
@EnableElasticsearchRepositories
public class ElasticsearchConfig extends AbstractElasticsearchConfiguration {
@Value("${elasticsearch.hosts}")
private String hosts;
@Value("${elasticsearch.connectionTimeOut:5000}")
private long connectionTimeOut;
@Value("${elasticsearch.socketTimeOut:5000}")
private long socketTimeOut;
@Override
@Bean
public RestHighLevelClient elasticsearchClient() {
if(hosts == null || hosts.isEmpty()) {
hosts = "localhost:9200";
}
ClientConfiguration clientConfiguration = ClientConfiguration.builder()
.connectedTo(hosts)
.withConnectTimeout(connectionTimeOut)
.withSocketTimeout(socketTimeOut)
.build();
return RestClients.create(clientConfiguration).rest();
}
}
错误 :
Caused by: org.elasticsearch.ElasticsearchException: Elasticsearch exception [type=mapper_parsing_exception, reason=Root mapping definition has unsupported parameters: [_class : {index=false, type=keyword, doc_values=false}]]
at org.elasticsearch.ElasticsearchException.innerFromXContent(ElasticsearchException.java:485)
at org.elasticsearch.ElasticsearchException.fromXContent(ElasticsearchException.java:396)
at org.elasticsearch.ElasticsearchException.innerFromXContent(ElasticsearchException.java:426)
at org.elasticsearch.ElasticsearchException.failureFromXContent(ElasticsearchException.java:592)
at org.elasticsearch.rest.BytesRestResponse.errorFromXContent(BytesRestResponse.java:168)
使用新版本的 ES 我没有这个问题,但我的产品仍在使用 6.8.8
解决方案
Elasticsearch 6.8.8 仍然有映射类型,但来自实际版本的客户端代码不再设置这些。并且 Spring Data Elasticsearch 不再添加该include_type_name
参数,自 4.0 以来已弃用该参数,现在已将其删除。
您需要将 Elasticsearch 集群升级到 7.x 或降级到 Spring Data Elasticsearch 4.1.x(应该是 Spring Boot 2.4.x)。Spring Data Elasticsearch 针对 Elasticsearch 6.8.x 的最新版本是 3.3。
推荐阅读
- javascript - 为什么我的动画无法通过 setinterval 清除
- scala - 返回内部类对象的列表
- php - PHP后期绑定静态与私有__construct
- c# - ASP.NET Core GDPR EU cookie 示例项目错误?
- c++ - 如何删除 LCRS 树的“最后一项”?
- android - 带有 api 21 的网格
- python - 在 Python 中使用 Mesa 库时,是否可以在多代理系统中定义子代理?
- python - python 包不适用于从 cron 执行的脚本
- php - 在免费的 wordpress 主题中重新排序部分
- javascript - 使用 requestAnimationFrame polyfill 时是否需要清除超时?