簡體   English   中英

刪除所有小於 Elasticsearch 中的值的元素

[英]delete all elements which is less than a value in 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列表

好吧, 按查詢刪除是要走的路。

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();

這被標記為Spring-data-elasticsearch 自版本 3.2 支持

例如,您可以使用查詢派生

除了查詢方法,計數和刪除查詢的查詢派生也是可用的。

在附錄 C 中,您可以看到IsLessThan是一個查詢派生關鍵字,這意味着應該立即支持以下內容:

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

通過使用查詢派生,您可以讓 spring 執行實現(手指交叉表示它將做“正確的事情”)。

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

這允許您傳入任何彈簧數據查詢(本機、字符串或條件)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM