有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

我正在使用ElasticSearchJavaAPI

我想删除符合条件的文件。我该怎么做?我没有找到它

我认为的一个选项是使用匹配条件进行查询,然后获取每个条件的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();
        }
    }

我想知道我怎么做,而不是实际查询和删除匹配查询。我看到JavaAPI中有一个prepareDeleteByQuery方法,不知道如何使用它

你能帮我解决这个问题吗?感谢您的帮助


共 (1) 个答案

  1. # 1 楼答案

    必须创建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 
    

    希望这有帮助!!谢谢