我正在尝试升级到ES 2.0。我下载了ES 2.0,并将其安装在Windows计算机上。
在我的pom.xml中,我具有以下内容:
<dependency> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch</artifactId> <version>2.0.0-rc1</version> </dependency> <dependency> <groupId>org.elasticsearch.plugin</groupId> <artifactId>delete-by-query</artifactId> <version>2.0.0-rc1</version> </dependency>
在我的Java代码中,使用ES 1.7.3时,确实通过以下方式通过查询删除:
StringBuilder b = new StringBuilder(""); b.append("{"); b.append(" \"query\": {"); b.append(" \"term\": {"); b.append(" \"category\": " + category_value ); b.append(" }"); b.append(" }"); b.append("}"); client = getClient(); DeleteByQueryResponse response = client.prepareDeleteByQuery("myindex") .setTypes("mydocytype") .setSource(b.toString()) .execute() .actionGet();
我希望替换为:
DeleteByQueryResponse response = client.prepareDeleteByQuery("myindex") .setTypes("mydocytype") .setSource(b.toString()) .execute() .actionGet();
与ES 2.0方式。谷歌搜索,但没有找到一个例子。在线API文档对我来说似乎太抽象了。我该怎么做?
另一个问题:我必须在Elasticsearch服务器中安装按查询删除插件吗?
感谢您的指导!
更新
我遵循了Max的建议,这就是我现在所拥有的:
首先,在创建客户端时,使设置如下所示:
Settings settings = Settings.settingsBuilder() .put("cluster.name", "mycluster") .put("plugin.types", DeleteByQueryPlugin.class.getName()) .build();
其次,在执行按查询删除的地方:
DeleteByQueryResponse rsp = new DeleteByQueryRequestBuilder(client, DeleteByQueryAction.INSTANCE) .setIndices("myindex") .setTypes("mydoctype") .setSource(b.toString()) .execute() .actionGet();
我还通过在ES的根目录中运行以下命令来安装按查询删除插件:
bin\plugin install delete-by-query
如果不安装此插件,则会收到错误消息。
完成所有这些步骤后,与ES相关的部分就可以正常工作。
我相信您可以使用:
DeleteByQueryResponse rsp = new DeleteByQueryRequestBuilder(client, DeleteByQueryAction.INSTANCE) .setTypes("mydocytype") .setSource(b.toString()) .execute() .actionGet();
您必须在设置中添加插件类型:
Settings settings = Settings.settingsBuilder() .put("plugin.types", DeleteByQueryPlugin.class.getName())
如果您有远程服务器,则必须安装插件。