类无法解决。它直接从所需的.class文件引用

时间:2016-09-27 06:00:45

标签: java elasticsearch

您好我正在尝试按查询执行更新,我正在使用此代码

UpdateByQueryRequestBuilder ubqrb = UpdateByQueryAction.INSTANCE.newRequestBuilder(client);

Script script = new Script("ctx._source.RELATIONSHIP_DEPTH = doc['"+AggregateValue_First+"'].value*doc['"+AggregateValue_Second+"'].value");

ubqrb.source(indexName)
    .script(script)
    .filter(QueryBuilders.matchAllQuery())
    .get();

但是我收到了这些错误:

  

类型   org.elasticsearch.action.support.replication.IndicesReplicationOperationRequestBuilder   无法解决。它是从需要间接引用的   .class文件      - 对于UpdateByQueryRequestBuilder类型

,方法源(String)未定义

我使用了reindex.jar,我按照这样构建我的节点:

node = nodeBuilder().clusterName(clusterName).client(true).node();
client = node.client();

我正在使用elasticsearch-2.3.4.jar,当我这样输入时,我没有收到任何错误:

UpdateByQueryClientWrapper ubqrb = new UpdateByQueryClientWrapper(client);
ubqrb.prepareUpdateByQuery().setScript("ctx._source.RELATIONSHIP_DEPTH = doc['"+AggregateValue_First+"'].value"+operator+"doc['"+AggregateValue_Second+"'].value");

当我使用查询时会出现问题,我应该将哪个版本的jar用于UpdateByQuery

1 个答案:

答案 0 :(得分:0)

  

无法解析类型org.elasticsearch.action.support.replication.IndicesReplicationOperationRequestBuilder。它是从所需的.class文件间接引用的 - 对于UpdateByQueryRequestBuilder类型,方法源(String)是未定义的

这意味着您自己的代码或其中一个直接依赖项中的类正在尝试使用类org.elasticsearch.action.support.replication.IndicesReplicationOperationRequestBuilder,该类当前不是您当前添加的任何.jar文件的一部分您的应用程序的依赖项。

通过一些谷歌搜索(*),可以发现此类曾经是elasticsearch.jar的一部分,例如在elasticsearch-1.5.1.jar中。

因此,您应该完成依赖项设置,并确保您使用的依赖项版本(以及您自己的代码调用的类)彼此一致。

例如,像Maven,Ivy,Gradle或Sbt这样的构建工具将使这更简单。通过手动处理依赖关系,它可以做更多工作,但仍然可行。

(*)如何找到它:

  1. Search for the class in question
  2. Open a link to JavaDocs。请参阅此页面描述的软件包版本。