You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Ingest Pipeline仅处理新增文档并输出至新索引?

仅让Ingest Pipeline处理新增文档的实现方案

核心思路

先完成存量文档的批量处理与迁移,再配置让后续新增文档自动触发Pipeline,同时避免重复处理存量数据。

具体步骤

1. 确认存量文档的迁移处理完成

先确保你执行的_reindex任务已全部完成,所有存量文档从index*迁移到new_index并通过Pipeline处理完毕。可通过以下命令查看任务状态:

GET _tasks?actions=*reindex&detailed=true

2. 为目标索引设置默认Pipeline

将你的pipeline设为new_index的默认Ingest Pipeline,后续所有写入/更新到new_index的文档会自动触发该Pipeline处理,存量文档因已处理过,不会被重复触发(除非手动更新)。执行命令:

PUT /new_index/_settings
{
  "index.default_pipeline": "pipeline"
}

3. 停止全量_reindex的重复执行

如果你之前定时执行全量_reindex来关联Pipeline,必须停止该操作,否则会重复处理已完成的存量文档,造成资源浪费。

可选:避免存量文档更新时重复处理

若存量文档后续有更新需求,且不希望更新操作触发Pipeline处理,可修改Pipeline添加条件判断:

方案A:用标记字段判断是否已处理

给Pipeline添加条件处理器,仅未标记的文档会执行处理逻辑,处理后自动添加标记:

PUT _ingest/pipeline/pipeline
{
  "processors": [
    {
      "condition": "ctx._source?.processed != true",
      "gsub": {
        "field": "my_field",
        "pattern": "regex",
        "replacement": ""
      }
    },
    {
      "set": {
        "field": "processed",
        "value": true,
        "ignore_failure": true
      }
    }
  ]
}

方案B:用时间条件过滤

设置仅处理_reindex完成时间之后的文档,将示例时间替换为你的实际完成时间:

PUT _ingest/pipeline/pipeline
{
  "processors": [
    {
      "condition": "ctx._source['@timestamp'] > '2024-05-20T00:00:00Z'",
      "gsub": {
        "field": "my_field",
        "pattern": "regex",
        "replacement": ""
      }
    }
  ]
}

内容的提问来源于stack exchange,提问作者fehim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 03:47:27