我在Elasticsearch中有一个索引,相对于时间戳,该索引已被某些 json 文件占用。 我想从该索引中删除数据。
curl -XDELETE http://localhost:9200/index_name
以上代码删除整个索引。我的要求是在一段时间后(例如1周后)删除某些数据。我可以自动执行删除过程吗?
我尝试使用curator进行删除。
但是我认为它会删除timestamp
创建的索引,而不是删除索引中的数据。我们可以使用curator删除索引中的数据吗?
如果我知道以下任何一种方法都能奏效,那将是很高兴的事情:
引用来自elasticsearch的官方网站。
非常感谢。
答案 0 :(得分:2)
您可以使用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
答案 1 :(得分:1)
使用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"
}
}
}
}
}
}
这将删除具有“时间戳”字段的记录,该字段是记录发生的日期/时间(在记录内)。可以运行查询以获取要删除的内容的计数。
GET index_name/_search
{
"size": 1,
"query: {
-- as above --
也可以使用偏移日期
"lte": "now-30d",
这将删除所有30天以上的记录。
答案 2 :(得分:0)
您始终可以使用documents删除单个HTTP request method DELETE。
要知道要删除哪些ID,需要查询数据。可能是在时间戳上使用了范围过滤器/查询。
与REST api交互时,可以使用python或任何其他语言来实现。如果您更喜欢直接使用的api,则还有一个Java客户端。