Ошибка в createIndexasticsearch с использованием ElasticsearchOperations. Почему происходит исключение «Ожидаемый класс BytesReference»? - PullRequest
2 голосов
/ 04 апреля 2020

Я использовал org.elasticsearch :asticsearch версии 6.8, а для подключения я использовал TransportClient. Затем я решил обновить его до версии 7.6, и поскольку TransportClient устарел, мне пришлось использовать соединение с elasti c через 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();
    }
}

Что я делаю не так?

Ответы [ 2 ]

1 голос
/ 05 апреля 2020

Проблема была решена с помощью _doc в Elasticsearch API, поскольку types устарело в версии Elasticsearch 7.X, и только тип _doc разрешен для обратной совместимости и будет полностью удален в Elasticsearch 8. X.

Дополнительная информация о удалении типов Официальная документация Elasticsearch.

0 голосов
/ 06 апреля 2020

Я хотел бы дополнить Opster Elasticsearch Ninja's answer . Описанная здесь проблема была решена с помощью реализации "org.elasticsearch.client :asticsearch-rest-high-level-client: 7.6.2" в вашем gradle.build. После этого вы должны указать тип индекса как _do c и убедиться, что ваша java версия клиента соответствует вашей версии Elasticsearch.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...