poznavaka
@poznavaka
Программист под Android, Web-разработчик

Почему ошибка при createIndex elasticsearch используя ElasticsearchOperations?

Я использовал org.elasticsearch:elasticsearch версии 6.8, а для подключения использовал TransportClient. Затем решил обновиться до версии 7.6, и так как TransportClient является Deprecated, был вынужден использовать подключение к elastic через 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)

Она возникает на строчке создания index:
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();
    }
}


Что я делаю не так? Судя по ошибке дело совсем не в создании индекс...
  • Вопрос задан
  • 191 просмотр
Решения вопроса 1
poznavaka
@poznavaka Автор вопроса
Программист под Android, Web-разработчик
Описанная здесь проблема решена добавлением implementation "org.elasticsearch.client:elasticsearch-rest-high-levell-client:7.6.2". в gradle.build. После этого вам следует указать тип индекса как _doc и убедиться, что ваша версия java-клиента соответствует версии Elasticsearch.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы