【问题标题】:java.lang.NoSuchMethodError: org.elasticsearch.action.bulk.BulkRequest.pipeline()Ljava/lang/String;java.lang.NoSuchMethodError: org.elasticsearch.action.bulk.BulkRequest.pipeline()Ljava/lang/String;
【发布时间】:2019-07-22 19:32:42
【问题描述】:

我正在使用来自 java 的 High Level Rest 客户端。针对 ES v6.6.1 的特定版本是 6.6.1

当我尝试执行全部是 IndexRequests 的 BulkRequest 时出现以下错误

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 版本存在差异
  • 我认为可能是这样,所以我在发布之前下载了 ES 6.6.1。我在 ES 6.6.1 上使用 defo,这是我的 gradle 依赖项:compile 'org.elasticsearch.client:elasticsearch-rest-high-level-client:6.6.1'
  • @JavaGuy 看看我的回答。您需要升级核心库。

标签: java elasticsearch


【解决方案1】:

public String pipeline() {
    return globalPipeline;
}

方法已添加到 Elasticsearch Server 模块 (GitHub file - 6.6 branch) 的版本 6.6

确保所有Elastic Search 模块共享相同的版本。
正如您所写的Rest Client6.6.1,我怀疑Server 比那个更旧(&lt; 6.6)。

你需要

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

或用于 Gradle

implementation 'org.elasticsearch:elasticsearch:6.6.1'

【讨论】:

  • 我正在使用 compile 'org.elasticsearch.client:elasticsearch-rest-high-level-client:6.6.1' 。我会尝试添加你提到的弹性搜索库 thx
  • @JavaGuy 是另一个模块。我发布的是Core。并在“依赖项”块中查找重复项。
  • 是的,谢谢。我正在添加其余的高级客户端和核心模块,对吗?
  • @JavaGuy 是的,没错。
  • 就是这样,谢谢。 dang - 不开心,因为我在上面浪费了很多时间。假设高休息客户端 6.6.1 将依赖于核心 6.6.1 是合理的,不是吗? ELK 堆栈的其他产品都是同步版本(ES、Kibana、LogStash 等)。感谢您的帮助
【解决方案2】:
<!-- 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>

我用这些代码解决了这个问题。

【讨论】:

    猜你喜欢
    • 2016-02-07
    • 1970-01-01
    • 2014-12-26
    • 1970-01-01
    • 1970-01-01
    • 2012-01-26
    • 2019-05-28
    • 1970-01-01
    相关资源
    最近更新 更多