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

时间:2017-04-07 07:28:13

标签: azure-search azure-search-.net-sdk

我创建了一个列出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()调用上设置断点,才能有效地强制运行索引器和删除文件之间的延迟。

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

在删除之前是否需要检查其他内容?

1 个答案:

答案 0 :(得分:1)

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