1

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

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

这是该过程的代码:

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() 调用上设置断点,有效地强制在运行索引器和删除文件之间产生延迟。

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

在删除之前我还需要检查其他内容吗?

4

1 回答 1

1

当您运行索引器时,它不会立即转换为 InProgress 状态 - 事实上,根据您的服务中正在运行的索引器的数量,在计划运行索引器之前可能会有很大的延迟。因此,当您在循环之前调用 GetStatus 时,索引器可能还不是 InProgress,您最终会过早地删除 blob。更可靠的方法是等待索引器完成此特定运行(例如,通过查看 LastResult 的 StartTime/EndTime)。

于 2017-04-07T07:51:55.603 回答