如何使用Java API删除所有内容而不是弹性搜索索引中的映射

时间:2018-01-11 11:07:14

标签: java elasticsearch

我有一个名为event的索引,它有大约250条记录。我想删除这250条记录而不删除完整的映射。

DeleteIndex delete = new DeleteIndex.Builder("events").build();
client.execute(delete);

上面的代码删除了完整的事件索引。如何才能删除内容?

2 个答案:

答案 0 :(得分:2)

基于ElasticSearch文档Delete By Query API,您可以使用以下查询删除索引中的所有文档:

POST twitter/tweet/_delete_by_query
{
  "query": {
    "match_all": {}
  }
}

使用ElasticSearch Java API "Delete By Query API" documentation

BulkByScrollResponse response =
    DeleteByQueryAction.INSTANCE.newRequestBuilder(client)
        .filter(QueryBuilders.matchQuery("gender", "male")) 
        .source("persons")                                  
        .get();                                             

long deleted = response.getDeleted(); 

请注意,此答案适用于 ElasticSearch 6.1 ,但对于其他版本的ElasticSearch可能会有所不同。

我希望这会对你有所帮助。

答案 1 :(得分:0)

由于我使用的是spring数据,因此我可以使用deleteAll功能解决此问题。

eventRepo.deleteAll();

为我做了诀窍。