微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

删除所有小于Elasticsearch中的值的元素

如何解决删除所有小于Elasticsearch中的值的元素

我在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"
   }
}

我想在Springdata Elasticsearch中使用QueryBuilder删除所有 id 列表,这些列表的 expirationDate 比今天小。

解决方法

嗯,delete by query是必经之路。

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

java client documentation表示您可以通过以下方式建立请求:

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

这被标记为supported by Spring-data-elasticsearch since version 3.2

例如,您可以使用query derivation

除了查询方法外,还可以使用计数和删除查询的查询推导。

在附录C中,您可以看到IsLessThan是一个查询派生关键字,这意味着应该开箱即用地支持以下内容:

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

通过使用查询派生,您可以让spring做实现(手指交叉说它将做“正确的事情”)。

但是您也可以使用ElasticsearchRestTemplate#delete(如果您使用的是较旧的ElasticsearchTemplate,效果相同)。

这允许您传入任何spring-data查询(本机,字符串或条件)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?