Java.lang.NoSuchMethodError: org.elasticsearch.action.bulk.BulkRequest.pipeline()Ljava/lang/String;

Я использую клиент High Level Rest из java. Конкретная версия 6.6.1 по сравнению с ES v6.6.1.

Я получаю следующую ошибку, когда пытаюсь выполнить BulkRequest, все из которых являются IndexRequests

java.lang.NoSuchMethodError: org.elasticsearch.action.bulk.BulkRequest.pipeline()Ljava/lang/String;

Рад сообщить о проблеме, но мне было интересно, может ли кто-нибудь знать, что случилось, если это не проблема.

Ниже приведен код, который я использую. Буду признателен, если кто-нибудь знает, что это за ошибка.

Я определенно использую lib 6.6.1

compile 'org.elasticsearch.client:elasticsearch-rest-high-level-client:6.6.1'

Спасибо

BasicCredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials("elastic", "changeme"));

RestClientBuilder builder = RestClient.builder(new HttpHost("asus.local", 9200))
    .setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider));
RestHighLevelClient client = new RestHighLevelClient(builder);
BulkRequest request = new BulkRequest();

String line;
while ((line = reader.readLine()) != null) {
  String[] split = line.split(",");
  Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm").parse(split[0]);
  Map< String, Object> jsonMap = new HashMap< String, Object>();
  jsonMap.put("valuedate", date);
  jsonMap.put("value", Double.valueOf(split[1]));
  IndexRequest indexRequest = new IndexRequest("my_index", "doc", String.valueOf(row))
      .source(jsonMap);
  request.add(indexRequest);
}

System.out.println("starting bulk call");
BulkResponse bulkResponse = client.bulk(request, RequestOptions.DEFAULT);
System.out.println("DONE");

Похоже на расхождение в версиях elasticsearch, используемых для компиляции/сборки проекта и используемых для его запуска.

Ivan 28.02.2019 21:02

Я подумал, что это может быть так, поэтому я скачал ES 6.6.1 перед публикацией. Я работаю с ES 6.6.1, и вот моя зависимость от Gradle: compile 'org.elasticsearch.client:elasticsearch-rest-high-level-clie‌​nt:6.6.1'

Java Guy 28.02.2019 21:10

@JavaGuy посмотри на мой ответ. Вам необходимо обновить основную библиотеку.

LppEdd 28.02.2019 21:11
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
3
2 743
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

То

public String pipeline() {
    return globalPipeline;
}

метод был добавлен в версию 6.6 модуля Elasticsearch Server (Файл GitHub — ветка 6.6).

Убедитесь, что все модули Elastic Search имеют одну и ту же версию.
Как вы написали, Rest Client это 6.6.1, я подозреваю, что Server старше этого (< 6.6).

Тебе нужно

<dependency>
    <groupId>org.elasticsearch</groupId>
    <artifactId>elasticsearch</artifactId>
    <version>6.6.1</version>
</dependency>

Или для градла

implementation 'org.elasticsearch:elasticsearch:6.6.1'

Я использовал compile 'org.elasticsearch.client:elasticsearch-rest-high-level-clie‌​nt:6.6.1' . Я попытаюсь добавить библиотеку elasticsearch, которую вы упомянули, спасибо

Java Guy 28.02.2019 21:12

@JavaGuy, это другой модуль. Тот, который я опубликовал, - это Основной. И ищите дубликаты внутри вашего блока «зависимости».

LppEdd 28.02.2019 21:12

да понял спасибо. Я добавляю и остальных высокоуровневых клиентов, и основной модуль, верно?

Java Guy 28.02.2019 21:14

@JavaGuy да, точно.

LppEdd 28.02.2019 21:14

это все спасибо. блин - не доволен, так как я потратил кучу времени на это. Было бы разумно предположить, что клиент с высоким уровнем покоя 6.6.1 будет зависеть от ядра 6.6.1, не так ли? Все другие продукты стека ELK синхронизированы по версии (ES, Kibana, LogStash и т. д.). Спасибо за вашу помощь

Java Guy 28.02.2019 21:17

@JavaGuy Я понимаю, ты немного зол. И да, ваше предположение верно. Я думаю, вы представляете более старую версию модуля Core с транзитивной зависимостью, которая вам неизвестна. Попробуйте запустить задачу Зависимости (docs.gradle.org/current/userguide/inspecting_dependencies.h‌​tml) и все увидите

LppEdd 28.02.2019 21:20

Не злой, просто слегка раздраженный. Я слышал о транзитивных зависимостях, но у меня буквально не было других зависимостей, связанных с эластичностью. жаль, что это не вышло красиво. зависимости { реализация 'org.springframework.boot: spring-boot-starter-jdbc' реализация 'com.fasterxml.jackson.module:jackson-module-kotlin' реализация 'org.jetbrains.kotlin:kotlin-reflect' реализация 'org. jetbrains.kotlin:kotlin-stdlib-jdk8' реализация 'org.elasticsearch:elasticsearch:6.6.1' реализация 'org.elasticsearch.client:elasticsearch-rest-high-level-clie‌​nt:6.6.1' }

Java Guy 28.02.2019 21:27

до вашей помощи я просто объявлял зависимость только для остальных высокоуровневых клиентов. работающие зависимости действительно показывают что-то с использованием 6.4.3 . +--- org.elasticsearch.client:elasticsearch-rest-high-level-clien‌​t:6.6.1 | +--- org.elasticsearch:elasticsearch:6.6.1 -> 6.4.3 | | +--- org.elasticsearch:elasticsearch-core:6.4.3 | | +--- org.elasticsearch:elasticsearch-secure-sm:6.4.3 | | +--- org.elasticsearch:elasticsearch-x-content:6.4.3 | | | +--- org.elasticsearch:elasticsearch-core:6.4.3

Java Guy 28.02.2019 21:35

@JavaGuy публикует полный вывод в вопросе, мне любопытно его прочитать

LppEdd 28.02.2019 21:35

SO не позволит мне редактировать вопрос, так как на него уже дан ответ. но вы можете посмотреть здесь: dropbox.com/s/j769pmhjk18ciso/dependencies.txt?dl=0 Кроме того, вот мой build.gradle (ничего больше не ссылалось на эластичные библиотеки, кроме клиента с высоким уровнем покоя) dropbox.com/s/r9v8vj205juvdmr/build.gradle?dl=0

Java Guy 28.02.2019 21:51

@JavaGuy Я подозреваю, что это связано с кэшированием. См. этот вопрос stackoverflow.com/questions/13565082/… На работе я обычно использую решение «./gradlew build --refresh-dependencies».

LppEdd 28.02.2019 22:01

@JavaGuy вы также можете проверить SHA или MD5 файла POM модуля Rest Central.maven.org/maven2/org/elasticsearch/client/… Если он отличается, что-то не так

LppEdd 28.02.2019 22:03
<!-- elasticsearch-rest-high-level-client -->
    <dependency>
        <groupId>org.elasticsearch.client</groupId>
        <artifactId>elasticsearch-rest-high-level-client</artifactId>
        <version>6.6.1</version>
        <exclusions>
            <exclusion>
                <groupId>org.elasticsearch</groupId>
                <artifactId>elasticsearch</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    <dependency>
        <groupId>org.elasticsearch</groupId>
        <artifactId>elasticsearch</artifactId>
        <version>6.6.1</version>
    </dependency>

Я решил эту проблему, используя этот код.

Другие вопросы по теме