如何解决删除所有小于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 举报,一经查实,本站将立刻删除。