使用最近的客户端 RestHighLevelClient 7.12.1 调用旧版本 ElasticSearch exp :6.8.8

Calling old version ElasticSearch exp :6.8.8 with a recent client RestHighLevelClient 7.12.1

从最近的 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).针对 Elasticsearch 6.8.x 的最新版本 Spring Data Elasticsearch 是 3.3.