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