gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 03:47:18 24 4
gpt4 key购买 nike

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

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

你能帮我解决这个问题吗?如有任何帮助,我们将不胜感激。

最佳答案

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

希望这有帮助!谢谢

关于java - Elasticsearch:如何根据匹配条件删除条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25337493/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com