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

cur*_*us1 7 elasticsearch elasticsearch-2.0

我正在尝试升级到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>
Run Code Online (Sandbox Code Playgroud)

在我的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();
Run Code Online (Sandbox Code Playgroud)

我希望能取代这个:

    DeleteByQueryResponse response = client.prepareDeleteByQuery("myindex")
                .setTypes("mydocytype")
                .setSource(b.toString())
                .execute()
                .actionGet();
Run Code Online (Sandbox Code Playgroud)

用ES 2.0方式.谷歌搜索但没有找到它的例子.在线API文档对我来说太抽象了.我该怎么做?

另一个问题:我是否必须在Elasticsearch服务器中安装delete-by-query插件?

谢谢你的指针!

UPDATE

我遵循马克斯的建议,这就是我现在所拥有的:

首先,在创建客户端时,使设置如下所示:

Settings settings = Settings.settingsBuilder()
                        .put("cluster.name", "mycluster")
                        .put("plugin.types", DeleteByQueryPlugin.class.getName())
                        .build();
Run Code Online (Sandbox Code Playgroud)

其次,在按查询删除的地方:

    DeleteByQueryResponse rsp = new DeleteByQueryRequestBuilder(client, DeleteByQueryAction.INSTANCE)
    .setIndices("myindex")
    .setTypes("mydoctype")
    .setSource(b.toString())
    .execute()
    .actionGet();
Run Code Online (Sandbox Code Playgroud)

我还通过在ES的根目录中运行以下命令来安装delete by query插件:

bin\plugin install delete-by-query
Run Code Online (Sandbox Code Playgroud)

如果我不安装此插件,我会收到错误.

完成所有这些步骤后,ES相关部分工作正常.

Ümi*_*mit 12

plugin.types已在ES 2.1.0()中弃用.因此,接受的解决方案将导致a NullPointerException.

解决方案是使用以下addPlugin方法:

Client client = TransportClient.builder().settings(settings())
                .addPlugin(DeleteByQueryPlugin.class)
                .build()
                .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("host",9300));
Run Code Online (Sandbox Code Playgroud)


Max*_*Max 11

我相信你可以用这个:

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

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

     Settings settings = Settings.settingsBuilder()
                         .put("plugin.types", DeleteByQueryPlugin.class.getName())
Run Code Online (Sandbox Code Playgroud)

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


Dan*_*ani 5

从弹性5开始......

final BulkIndexByScrollResponse response = DeleteByQueryAction.INSTANCE.newRequestBuilder(super.transportClient)
                    .filter(
                            QueryBuilders.boolQuery()
                                    .must(QueryBuilders.termQuery("_type", "MY_TYPE")) // Trick to define and ensure the type.
                                    .must(QueryBuilders.termQuery("...", "...")))
                    .source("MY_INDEX")
                    .get();

    return response.getDeleted() > 0;
Run Code Online (Sandbox Code Playgroud)

官方文件