ES 批量删除数据

如果 ES 存储的数据特别多,在查询时会非常缓慢,还浪费存储。
可以通过 Delete By Query 的方式,删除掉不需要的数据。

基本操作

案例

// 删除 version_value 字段为 64181 的数据
// log_xxx_* 后面的是通配符
POST /log_xxx_*/_delete_by_query
{
  "query": {
    "bool": {
      "must": [
        { "match": { "version_value": 64181 } }
      ]
    }
  }
}

POST /log_xxx_2022_10_20/_delete_by_query
{
  "query": {
    "bool": {
      "must": [
        {
          "exists": {
            "field": "version_value"
          }
        },
        {
          "range": {
            "version_value": {
              "gte": 1,
              "lte": 87750
            }
          }
        }
      ]
    }
  }
}

C# 代码自动操作

根据需要,也可以使用代码,定期执行,删除数据

NuGet Gallery | NEST 7.17.5

代码样例,具体写法,参照 NEST 的使用文档。

注意,DateRangeQuery 中的 DateTime,好像不能有毫秒数(需要是 0 )

// DateTime start, DateTime end, int count
var request = new DeleteByQueryRequest<SourceDocument>()
{
    
    
    Size = count, // 如果一次删除的范围太多,可能会执行失败,执行超时什么的
    Query = new BoolQuery()
    {
    
    
        Must = new List<QueryContainer>
        {
    
    
            new DateRangeQuery
            {
    
    
                Field = new Field("date_time"),
                GreaterThanOrEqualTo = new DateMathExpression(start),
                LessThan = new DateMathExpression(end),
            },
            new ExistsQuery()
            {
    
    
                Field = new Field("version_value"),
            },
            new LongRangeQuery()
            {
    
    
                Field = new Field("version_value"),
                GreaterThanOrEqualTo = 1,
                LessThanOrEqualTo = _maxVersion
            }
        }
    },
};
var response = await _originEsClient.DeleteByQueryAsync(request);

参考资料

ElasticSearch 定时批量删除N天前的数据_geekswg的博客-CSDN博客
使用 Delete By Query API 的方式删除ES索引中的数据 - 腾讯云开发者社区-腾讯云

How to solve version_conflict_engine_exception in Elasticsearch Exception? - Stack Overflow
看完这篇还不会 Elasticsearch 搜索,那我就哭了! - 武培轩 - 博客园

附加

这个仓库,可以根据 js 代码,来生成 ES 查询语句

danpaz/bodybuilder: An elasticsearch query body builder
Bodybuilder | An elasticsearch query body builder

猜你喜欢

转载自blog.csdn.net/lj22377/article/details/127551628