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

针对JSON数组索引器,删除Blob时自动移除Azure索引文档

实现Azure Blob删除时自动移除关联搜索索引文档的方案

针对你遇到的单个Blob生成多索引文档、删除Blob无法自动删除对应索引的问题,可通过以下步骤实现需求:

1. 给索引文档添加源Blob标识字段

首先在搜索索引中新增一个sourceBlobId字段(类型设为Edm.String,需开启可过滤属性),用来记录每个索引文档对应的源Blob名称。

修改索引器的fieldMappings配置,将Blob系统元数据映射到这个字段:

"fieldMappings": [
  {
    "sourceFieldName": "metadata_storage_name",
    "targetFieldName": "sourceBlobId"
  }
]

metadata_storage_name是Blob存储自带的系统元数据,对应Blob的唯一名称。

2. 启用Blob软删除检测策略

更新索引器的参数配置,添加软删除检测规则,让索引器能够识别已删除的Blob:

"parameters": {
  "batchSize": null,
  "maxFailedItems": null,
  "maxFailedItemsPerBatch": null,
  "base64EncodeKeys": null,
  "configuration": {
    "parsingMode": "jsonArray",
    "deleteDetectionPolicy": {
      "@odata.type": "#Microsoft.Azure.Search.BlobSoftDeleteDetectionPolicy"
    }
  }
},

3. 批量删除关联索引文档

因为单个Blob对应多个索引文档,需要基于sourceBlobId批量删除,推荐两种实现方式:

方式一:Azure函数触发(简单高效)

配置Azure Blob存储的删除事件触发器,当Blob被删除时自动触发Azure函数:

  • 函数获取被删除Blob的名称
  • 调用Azure搜索批量删除API,删除所有sourceBlobId匹配该名称的文档,请求示例:
{
  "value": [
    {
      "@search.action": "delete",
      "sourceBlobId": "被删除的Blob文件名"
    }
  ]
}

注意给Azure函数配置访问搜索服务的权限(使用托管身份即可)。

方式二:自定义技能集(适合复杂场景)

如果索引器已配置技能集,可添加自定义技能,在索引器检测到Blob删除时,自动生成批量删除请求。这种方式适合需要额外处理逻辑的场景。

4. 验证流程

  • 上传包含JSON数组的Blob,确认所有生成的索引文档都带有正确的sourceBlobId值
  • 删除该Blob,触发删除逻辑后,检查搜索索引中对应文档是否全部被移除

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 00:17:15