我使用的是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();
}
}
我在做什么错?
此问题已通过在Elasticsearch API中使用_doc
解决,因为在Elasticsearch 7.X版本中不推荐使用types
,并且仅允许_doc
类型用于向后兼容,并且在Elasticsearch 8.X中将其完全删除。 。
有关removal of types Elasticsearch官方文档的更多信息。
我想补充Opster Elasticsearch Ninja`s answer。通过gradle.build中的实现“” org.elasticsearch.client:elasticsearch-rest-high-level-client:7.6.2“解决了此处描述的问题。之后,您应该将索引类型指定为_ doc,并确保您的Java客户端版本与您的Elasticsearch版本匹配。