Я использую клиент 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");
Я подумал, что это может быть так, поэтому я скачал ES 6.6.1 перед публикацией. Я работаю с ES 6.6.1, и вот моя зависимость от Gradle: compile 'org.elasticsearch.client:elasticsearch-rest-high-level-client:6.6.1'
@JavaGuy посмотри на мой ответ. Вам необходимо обновить основную библиотеку.




То
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-client:6.6.1' . Я попытаюсь добавить библиотеку elasticsearch, которую вы упомянули, спасибо
@JavaGuy, это другой модуль. Тот, который я опубликовал, - это Основной. И ищите дубликаты внутри вашего блока «зависимости».
да понял спасибо. Я добавляю и остальных высокоуровневых клиентов, и основной модуль, верно?
@JavaGuy да, точно.
это все спасибо. блин - не доволен, так как я потратил кучу времени на это. Было бы разумно предположить, что клиент с высоким уровнем покоя 6.6.1 будет зависеть от ядра 6.6.1, не так ли? Все другие продукты стека ELK синхронизированы по версии (ES, Kibana, LogStash и т. д.). Спасибо за вашу помощь
@JavaGuy Я понимаю, ты немного зол. И да, ваше предположение верно. Я думаю, вы представляете более старую версию модуля Core с транзитивной зависимостью, которая вам неизвестна. Попробуйте запустить задачу Зависимости (docs.gradle.org/current/userguide/inspecting_dependencies.html) и все увидите
Не злой, просто слегка раздраженный. Я слышал о транзитивных зависимостях, но у меня буквально не было других зависимостей, связанных с эластичностью. жаль, что это не вышло красиво. зависимости { реализация '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-client:6.6.1' }
до вашей помощи я просто объявлял зависимость только для остальных высокоуровневых клиентов. работающие зависимости действительно показывают что-то с использованием 6.4.3 . +--- org.elasticsearch.client:elasticsearch-rest-high-level-client: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
@JavaGuy публикует полный вывод в вопросе, мне любопытно его прочитать
SO не позволит мне редактировать вопрос, так как на него уже дан ответ. но вы можете посмотреть здесь: dropbox.com/s/j769pmhjk18ciso/dependencies.txt?dl=0 Кроме того, вот мой build.gradle (ничего больше не ссылалось на эластичные библиотеки, кроме клиента с высоким уровнем покоя) dropbox.com/s/r9v8vj205juvdmr/build.gradle?dl=0
@JavaGuy Я подозреваю, что это связано с кэшированием. См. этот вопрос stackoverflow.com/questions/13565082/… На работе я обычно использую решение «./gradlew build --refresh-dependencies».
@JavaGuy вы также можете проверить SHA или MD5 файла POM модуля Rest Central.maven.org/maven2/org/elasticsearch/client/… Если он отличается, что-то не так
<!-- 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>
Я решил эту проблему, используя этот код.
Похоже на расхождение в версиях elasticsearch, используемых для компиляции/сборки проекта и используемых для его запуска.