当前位置: 首页 > 面试题库 >

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

宗政小林
2023-03-14
问题内容

我正在尝试升级到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())

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



 类似资料:
  • 我有一个\u索引:varnish\u日志和\u类型:varnish 具有两个不同值的字段“server”:“India”和“server”:“usa” 现在我只想删除在美国的记录。 我试过用 $curl-XDELETE'http://localhost:9200/_all/_query?q=server:美国' 响应:未找到uri[]和方法的处理程序[DELETE] 请告诉我哪里错了

  • 问题内容: 我正在慢慢地将所有功能从一个功能移到另一个功能,并且遇到了第一个障碍。我不知道如何通过参数遍历结果。我对以下内容满意: 但是,如果我想做这样的事情: 显然,“其他”是动态的。 问题答案: 这是一个使用PDO连接到数据库,告诉它引发Exception(而不是php错误)(将帮助您调试)以及使用参数化语句而不是将动态值替换为查询本身的示例(强烈建议):

  • 问题内容: 我有一个dbf,我想使用VB6复制到新的mdb中。 以下是我的专长,可以轻松地创建新的mdb,但是,我认为我可以使用INTO进行Select查询,以使用数据创建新表。 请注意:我假设的是在运行SQL查询时创建了MSAccess表。 我在FROM子句中收到语法错误。我试图做的是操纵此sql查询以执行我需要的操作: sql =“将INERT插入[Table1] SELECT * FROM

  • 问题内容: 我当前正在使用Elasticsearch V2.3.1。我想在Java中使用以下Elasticsearch查询。 上面的查询搜索名为“ kimchy”的“用户”,并使用给定值更新“列表”字段。该查询同时更新多个文档。我在https://www.elastic.co/guide/en/elasticsearch/client/java- api/2.3/java-docs- update

  • 问题内容: 我发现了一个有趣的功能,称为delete by query 。我如何在jest客户程序中使用它? 谢谢! 问题答案: 您可以使用如下所示的类: 另请注意,如果您运行的是ES 2.x或更高版本,则需要先从插件安装Delete by query API 。

  • 问题内容: 我有一个对象(BlogPost),其中包含元素(标记)的M:N集合。 如何查询对象(BlogPost)中至少一个对象的标签与使用JPA2(hibernate)的一组标签(由用户定义)中的元素匹配。 我的主要问题是,我实际上需要比较两个标签集合:-BlogPost的标签集合。-我搜索的收藏集 我尝试了一下,但是它不起作用,因为我的帖子实体具有多个标签。 那我该怎么办呢? 我的BlogPo