删除elasticsearch中小于某个值的所有元素

stszievb  于 2021-06-14  发布在  ElasticSearch
关注(0)|答案(1)|浏览(322)

我在elasticsearch中保存了以下json数据:

{
   "id":"1234",
   "expirationDate":"17343234234",
   "paths":"http:localhost:9090",
   "work":"software dev",
   "family":{
      "baba":"jams",
      "mother":"ela"
   }
},
{
   "id":"00021",
   "expirationDate":"0123234",
   "paths":"http:localhost:8080",
   "work":"software engi",
   "family":{
      "baba":"stev",
      "mother":"hela"
   }
}

我想使用SpringDataElasticSearch中的querybuilder删除所有过期日期小于今天的ID列表

h6my8fg2

h6my8fg21#

好吧,通过查询删除是一种方法。

POST /{your_index_name}/_delete_by_query
{
  "query": {
    "range": {
      "expirationDate": {
        "lt": "{your_timestamp}"
      }
    }
  } 
}

java客户机文档表明您可以通过以下方式构建请求:

BulkByScrollResponse response =
  new DeleteByQueryRequestBuilder(client, DeleteByQueryAction.INSTANCE)
    .filter(QueryBuilders.matchQuery("gender", "male")) 
    .source("persons")                                  
    .get();                                             
long deleted = response.getDeleted();

这被标记为从3.2版起受SpringDataElasticSearch支持。
例如,可以使用查询派生:
除了查询方法之外,还可以使用count和delete查询的查询派生。
在附录c中,你可以看到 IsLessThan 是一个查询派生关键字,这意味着应该支持以下内容: 

interface YourRepository extends CrudRepository<User, Long> {
  long deleteByExpirationDateIsLessThan(long timestamp);
}

通过使用查询派生,您可以让spring来实现(祈祷它能做“正确的事情”)。
但你也可以使用 ElasticsearchRestTemplate#delete (如果您使用的是旧的 ElasticsearchTemplate ,其工作原理相同)。
这允许您传入任何spring数据查询(本机、字符串或条件)。

相关问题