我创建了一个列出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()调用上设置断点,才能有效地强制运行索引器和删除文件之间的延迟。
没有暂停,索引器返回成功,我删除了文件,但文件内容尚未从索引中删除 - 它们仍显示在搜索结果中(文件已被物理删除)
在删除之前是否需要检查其他内容?
答案 0 :(得分:1)
当您运行索引器时,它不会立即转换为InProgress状态 - 实际上,根据您的服务中运行的索引器数量,在索引器计划运行之前可能会有一个显着的延迟。因此,当您在循环之前调用GetStatus时,索引器可能还不是InProgress,并且您最终会过早删除blob。 更可靠的方法是等待索引器完成此特定运行(例如,通过查看LastResult的StartTime / EndTime)。