如何在一段时间后从elasticsearch中的特定索引中删除数据?
How to delete data from a specific index in elasticsearch after a certain period?
我在 elasticsearch 中有一个索引被一些 json 文件占用,与 timestamp 有关。
我想从该索引中删除数据。
curl -XDELETE http://localhost:9200/index_name
以上代码删除了整个索引。我的要求是在一段时间后(例如 1 周后)删除某些数据。我可以自动执行删除过程吗?
我尝试使用 curator 删除。
但我认为它会删除 timestamp
创建的索引,而不是索引中的数据。我们可以使用 curator 删除索引中的数据吗?
如果我知道以下任何一个都行得通,我将很高兴:
- Curl 可以在一段时间后自动从索引中删除数据吗?
- curator 能否在一段时间后自动从索引中删除数据?
- 有没有像python脚本这样的其他方法来完成这项工作?
引用自elasticsearch.
的官方网站
非常感谢。
您可以随时删除单个 documents by using the HTTP request method DELETE。
要知道您要删除哪些 ID,您需要查询您的数据。可能是通过在时间戳上使用范围 filter/query。
当您与 REST api 交互时,您可以使用 python 或任何其他语言进行交互。如果您更喜欢更直接的 api.
,还有一个 Java 客户端
您可以使用 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
使用Delete By Query 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"
}
}
}
}
}
}
这将删除具有字段 "timestamp" 的记录,该字段是它们出现的 date/time(在记录中)。可以 运行 查询以获取将要删除的内容的计数。
GET index_name/_search
{
"size": 1,
"query: {
-- as above --
使用偏移日期也很好
"lte": "now-30d",
这将删除所有超过 30 天的记录。
我在 elasticsearch 中有一个索引被一些 json 文件占用,与 timestamp 有关。 我想从该索引中删除数据。
curl -XDELETE http://localhost:9200/index_name
以上代码删除了整个索引。我的要求是在一段时间后(例如 1 周后)删除某些数据。我可以自动执行删除过程吗?
我尝试使用 curator 删除。
但我认为它会删除 timestamp
创建的索引,而不是索引中的数据。我们可以使用 curator 删除索引中的数据吗?
如果我知道以下任何一个都行得通,我将很高兴:
- Curl 可以在一段时间后自动从索引中删除数据吗?
- curator 能否在一段时间后自动从索引中删除数据?
- 有没有像python脚本这样的其他方法来完成这项工作?
引用自elasticsearch.
的官方网站非常感谢。
您可以随时删除单个 documents by using the HTTP request method DELETE。
要知道您要删除哪些 ID,您需要查询您的数据。可能是通过在时间戳上使用范围 filter/query。
当您与 REST api 交互时,您可以使用 python 或任何其他语言进行交互。如果您更喜欢更直接的 api.
,还有一个 Java 客户端您可以使用 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
使用Delete By Query 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"
}
}
}
}
}
}
这将删除具有字段 "timestamp" 的记录,该字段是它们出现的 date/time(在记录中)。可以 运行 查询以获取将要删除的内容的计数。
GET index_name/_search
{
"size": 1,
"query: {
-- as above --
使用偏移日期也很好
"lte": "now-30d",
这将删除所有超过 30 天的记录。