2016-09-27 87 views
0

你好我试图执行由查询更新,我使用此代码类无法解析。它是直接从所需要的.class文件中引用

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(); 

但我得到这些错误:

The type org.elasticsearch.action.support.replication.IndicesReplicationOperationRequestBuilder cannot be resolved. It is indirectly referenced from required .class files - The method source(String) is undefined for the type UpdateByQueryRequestBuilder

我已经使用在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"); 

的问题,当我使用的查询,我应该使用哪个UpdateByQuery罐子的版本出现?

+0

你只需要运行一次这个代码来添加你的字段?如果是的话,为什么不简单地通过Sense或curl来运行这个通过查询的更新? – Val

+0

事情是我建立一个类,它会自动计算值,并创建所有文档的字段,基本上就像一个公式,这就是为什么我需要此代码,此外,我在一个函数内使用它,所以每当函数claled它将创建一个具有新计算值的新字段。 – Dhirish

+0

UpdateByQuery是用于您的用例的方式,但我不明白为什么会出现错误。看来你使用的库与你正在运行的ES版本不兼容。你正在运行哪个版本的ES? – Val

回答

0

The type org.elasticsearch.action.support.replication.IndicesReplicationOperationRequestBuilder cannot be resolved. It is indirectly referenced from required .class files - The method source(String) is undefined for the type UpdateByQueryRequestBuilder

这意思是,无论是在自己的代码或在您的直接依赖的一个一类是试图使用类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。查看该页面描述的软件包版本。
+0

非常感谢先生Tomppa它的工作,新版本缺少索引复制,我只是将依赖关系设置为旧版本,现在它的工作,非常感谢先生。 – Dhirish

+0

现在我的reindex和elasticsearch罐子相互冲突,而且我的瓶子地狱,如果我给作为maven的依赖项,这将解决这个问题吗? – Dhirish

+0

构建工具将使生活变得更简单,但不是万能的。基本上,您仍然需要确保使用不同组件的兼容版本(但通常可以通过从Internet搜索信息来解决此问题)。 – t0mppa

相关问题