一尘不染

Elasticsearch 2.0:如何在Java中通过查询删除

elasticsearch

我正在尝试升级到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相关的部分就可以正常工作。


阅读 421

收藏
2020-06-22

共1个答案

一尘不染

我相信您可以使用:

     DeleteByQueryResponse rsp = new DeleteByQueryRequestBuilder(client, DeleteByQueryAction.INSTANCE)
            .setTypes("mydocytype")
            .setSource(b.toString())
            .execute()
            .actionGet();

您必须在设置中添加插件类型:

     Settings settings = Settings.settingsBuilder()
                         .put("plugin.types", DeleteByQueryPlugin.class.getName())

如果您有远程服务器,则必须安装插件。

2020-06-22