elasticsearch,Java,Spring Boot,elasticsearch" /> elasticsearch,Java,Spring Boot,elasticsearch" />

Java 使用ElasticsearchOperations创建索引elasticsearch时出错。为什么是";应为BytesReference类;异常发生了吗?

Java 使用ElasticsearchOperations创建索引elasticsearch时出错。为什么是";应为BytesReference类;异常发生了吗?,java,spring-boot,elasticsearch,Java,Spring Boot,elasticsearch,我使用了org.elasticsearch:elasticsearch版本6.8,对于连接,我使用了TransportClient。然后,我决定升级到7.6版,因为TransportClient不推荐使用,所以我不得不通过RestHighLevelClient使用到elastic的连接。在此之后,启动后出现以下错误: java.lang.IncompatibleClassChangeError: Found interface org.elasticsearch.common.bytes.Byt

我使用了org.elasticsearch:elasticsearch版本6.8,对于连接,我使用了TransportClient。然后,我决定升级到7.6版,因为TransportClient不推荐使用,所以我不得不通过RestHighLevelClient使用到elastic的连接。在此之后,启动后出现以下错误:

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();
    }
}

我做错了什么?

该问题通过使用Elasticsearch API中的
\u doc
解决,因为Elasticsearch 7.X版本中不推荐
类型
,仅允许
\u doc
类型用于向后兼容,并且在Elasticsearch 8.X中将完全删除


关于Elasticsearch官方文档的更多信息。

我想补充一下。这里描述的问题已经通过在gradle.build中实现“org.elasticsearch.client:elasticsearch rest高级客户端:7.6.2”得到了解决。之后,您应该将索引类型指示为_doc,并确保您的java客户端版本与Elasticsearch版本匹配。

您可以共享您的
pom.xml
?是的,只有gradle,它在这里:您可以检查您的类路径中是否有两个版本的RestHighLevelClient吗,您还可以使用适当的指令共享整个代码库,以便我们可以尝试itI添加的实现org.elasticsearch.client:elasticsearch rest高级客户端,错误结束,但我在将模型保存到elasticsearchtypes时出现了“type丢失;7942:type丢失;7943…”错误ES 7.X中不推荐使用Types,您需要将
\u doc
作为类型名传递才能使其工作