首页 > 解决方案 > 使用最近的客户端 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

标签: javaspring-bootelasticsearchspring-data-elasticsearch

解决方案


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。


推荐阅读