我创建了一个应用程序,它列出了 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() 调用上放置了一个断点,从而有效地强制运行索引器和删除文件之间存在延迟。
没有暂停,索引器成功返回,我删除了文件,但文件内容尚未从索引中删除 - 它们仍显示在搜索结果中(文件已被物理删除)。
在删除之前还有什么我需要检查的吗?
当您运行索引器时,它不会立即转换为 InProgress 状态 - 事实上,根据您的服务中正在运行的索引器数量,索引器计划运行之前可能会有明显的延迟。因此,当您在循环之前调用 GetStatus 时,索引器可能还不是 InProgress,您最终会过早地删除 blob。更可靠的方法是等待索引器完成此特定运行(例如,通过查看 LastResult 的 StartTime/EndTime)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句