用于 Blob 存储的 Azure 搜索 SDK - 删除文件

Azure Search SDK for Blob Storage - Deleting Files

我创建了一个应用程序,列出了 Azure 存储容器中的所有文档,并允许用户标记要删除的特定文件。

这是一个 Azure 搜索应用程序,因此该过程是将 "deleted" 元数据 属性 添加到所选文件,运行 索引器从索引中删除该信息,然后物理删除文件。

这是该过程的代码:

serviceClient.Indexers.Run(documentIndexer);

var status = serviceClient.Indexers.GetStatus(documentIndexer).LastResult.Status;

// Loop until the indexer is done
while (status == IndexerExecutionStatus.InProgress)
{
    status = serviceClient.Indexers.GetStatus(documentIndexer).LastResult.Status;
}

// If successful, delete the flagged files
if (status == IndexerExecutionStatus.Success)
{
    DeleteFlagged();
}

一切正常,但前提是我在 DeleteFlagged() 调用上放置了一个断点,有效地在 运行 索引器和删除文件之间强制延迟。

没有暂停,索引器成功返回,我删除了文件,但文件内容并未从索引中删除 - 它们仍显示在搜索结果中(文件已被物理删除) .

在删除之前我还需要检查什么吗?

当您 运行 一个索引器时,它不会立即转换到 InProgress 状态 - 事实上,根据您的服务中 运行 正在使用的索引器的数量,可能会有明显的延迟在索引器被安排到 运行 之前。因此,当您在循环之前调用 GetStatus 时,索引器可能尚未处于 InProgress 状态,您最终会过早地删除 blob。 一种更可靠的方法是等待索引器完成这个特定的 运行(例如,通过查看 LastResult 的 StartTime/EndTime)。