[英]How to delete data from a specific index in elasticsearch after a certain period?
我在 elasticsearch 中有一個索引,它被一些與時間戳相關的json文件占用。 我想從該索引中刪除數據。
curl -XDELETE http://localhost:9200/index_name
上面的代碼刪除了整個索引。 我的要求是在一段時間后(例如 1 周后)刪除某些數據。 我可以自動執行刪除過程嗎?
我嘗試使用curator刪除。
但我認為它刪除了timestamp
創建的索引,而不是索引中的數據。 我們可以使用 curator 刪除索引中的數據嗎?
如果我知道以下任一項可行,我會很高興:
參考資料來自elasticsearch的官方網站。
非常感謝。
您可以使用DELETE BY QUERY
API: https : //www.elastic.co/guide/en/elasticsearch/reference/current/docs-delete-by-query.html
基本上,它將刪除與提供的查詢匹配的所有文檔:
POST twitter/_delete_by_query
{
"query": {
"match": {
"message": "some message"
}
}
}
但是建議的方法是對不同時期(例如,天)實施索引,並使用curator
根據age
定期刪除它們:
...
logs_2019.03.11
logs_2019.03.12
logs_2019.03.13
logs_2019.03.14
使用按查詢刪除 API 的簡單示例:
POST index_name/_delete_by_query
{
"query": {
"bool": {
"filter": {
"range": {
"timestamp": {
"lte": "2019-06-01 00:00:00.0",
"format": "yyyy-MM-dd HH:mm:ss.S"
}
}
}
}
}
}
這將刪除具有“時間戳”字段的記錄,該字段是它們發生的日期/時間(在記錄內)。 可以運行查詢以獲取將要刪除的內容的計數。
GET index_name/_search
{
"size": 1,
"query: {
-- as above --
使用偏移日期也很好
"lte": "now-30d",
這將刪除所有超過 30 天的記錄。
您始終可以使用HTTP請求方法DELETE刪除單個文檔 。
要知道您要刪除哪些ID,您需要查詢數據。 可能是通過在時間戳上使用范圍過濾器/查詢來實現的。
與REST api交互時,可以使用python或任何其他語言來實現。 如果您更喜歡直接使用的api,則還有一個Java客戶端。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.