使用ElasticsearchOperations的createIndex elasticsearch发生错误。为什么会发生“预期的BytesReference类”异常?

问题描述 投票:2回答:2

我使用的是org.elasticsearch:elasticsearch版本6.8,为了进行连接,我使用了TransportClient。然后,我决定升级到7.6版,并且因为不赞成使用TransportClient,所以我不得不使用该连接通过RestHighLevelClient进行弹性处理。此后,启动后出现以下错误:

java.lang.IncompatibleClassChangeError: Found interface org.elasticsearch.common.bytes.BytesReference, but class was expected
at org.elasticsearch.client.RequestConverters.createEntity(RequestConverters.java:689)
at org.elasticsearch.client.RequestConverters.createEntity(RequestConverters.java:684)
at org.elasticsearch.client.IndicesRequestConverters.createIndex(IndicesRequestConverters.java:128)
at org.elasticsearch.client.RestHighLevelClient.internalPerformRequest(RestHighLevelClient.java:1760)
at org.elasticsearch.client.RestHighLevelClient.performRequest(RestHighLevelClient.java:1734)
at org.elasticsearch.client.RestHighLevelClient.performRequestAndParseEntity(RestHighLevelClient.java:1696)
at org.elasticsearch.client.IndicesClient.create(IndicesClient.java:191)
at org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate.createIndex(ElasticsearchRestTemplate.java:1248)
at org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate.createIndex(ElasticsearchRestTemplate.java:1256)

它出现在索引创建行上:

elasticsearchOperations.deleteIndex(clazz);
elasticsearchOperations.createIndex(clazz, loadFromFileSetting(pathSetting, someParams));

我使用以下配置类进行连接:

@Slf4j
@Configuration
@EnableElasticsearchRepositories(basePackages = "com.project.elastic.repository")
public class ElasticConfig extends AbstractElasticsearchConfiguration {

    @Value("${spring.data.elastic.url}")
    private String url;

    @Override
    public RestHighLevelClient elasticsearchClient() {
        return RestClients.create(ClientConfiguration.create(url)).rest();
    }
}

我在做什么错?

java spring-boot elasticsearch
2个回答
1
投票

此问题已通过在Elasticsearch API中使用_doc解决,因为在Elasticsearch 7.X版本中不推荐使用types,并且仅允许_doc类型用于向后兼容,并且在Elasticsearch 8.X中将其完全删除。 。

有关removal of types Elasticsearch官方文档的更多信息。


0
投票

我想补充Opster Elasticsearch Ninja`s answer。通过gradle.build中的实现“” org.elasticsearch.client:elasticsearch-rest-high-level-client:7.6.2“解决了此处描述的问题。之后,您应该将索引类型指定为_ doc,并确保您的Java客户端版本与您的Elasticsearch版本匹配。

© www.soinside.com 2019 - 2024. All rights reserved.