如何根据搜索条件删除某些文档?
我正在使用ElasticSearch Java API。
我想删除符合匹配条件的文档。我该怎么做呢?我没找到它。
我认为一个选项是使用匹配条件进行查询,然后获取每个选项的ID并删除它们。
以下是基于id的删除代码,我正在做。
BoolQueryBuilder queryBuilder = QueryBuilders
.boolQuery()
.must(QueryBuilders.termQuery("myid", "2"))
.minimumShouldMatch("100%")
.should(QueryBuilders.matchPhraseQuery("hnumber", "22"))
.minimumNumberShouldMatch(1);
SearchResponse actionGet = client.prepareSearch(<index>).setTypes(<type>)
.setQuery(queryBuilder)
.addSort("timestamp", SortOrder.DESC)
.setSearchType(SearchType.DEFAULT)
.setFrom(0)
.setSize(15)
.execute()
.actionGet();
对于每个结果,执行以下代码。
Client client = new TransportClient(settings).addTransportAddress(new InetSocketTransportAddress(strIPAddress, iPort));
try {
DeleteResponse response = client.prepareDelete(<index>, <type>, id)
.execute()
.actionGet();
return response.getId();
} catch(Throwable th){
} finally {
if(null != client) {
client.close();
}
}
我想知道如何在没有匹配查询的情况下实际查询和删除。我在Java API中看到有一个方法prepareDeleteByQuery,不知道如何使用它。
你可以帮我解决这个问题吗?任何帮助表示赞赏。
答案 0 :(得分:2)
您必须创建DeleteByQueryRequestBuilder并执行,
我设法为您创建了请求。
DeleteByQueryRequestBuilder requestBuilder=new DeleteByQueryRequestBuilder(transportClient);
requestBuilder.setQuery(
QueryBuilders
.boolQuery()
.must(QueryBuilders.termQuery("myid", "2"))
.minimumShouldMatch("100%")
.should(QueryBuilders.matchPhraseQuery("hnumber", "22"))
.minimumNumberShouldMatch(1)
);
requestBuilder.get(); //it have the response
希望这有帮助!!感谢