Elasticsearch:如何根据匹配条件删除条目

时间:2014-08-16 06:17:07

标签: java elasticsearch

如何根据搜索条件删除某些文档?

我正在使用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,不知道如何使用它。

你可以帮我解决这个问题吗?任何帮助表示赞赏。

1 个答案:

答案 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 

希望这有帮助!!感谢