2017-04-07 9 views
1

Azureストレージコンテナ内のすべてのドキュメントを一覧表示するアプリケーションを作成し、特定のファイルにマークを付けるようにしました。BlobストレージのAzure Search SDK - ファイルの削除

これはAzure Searchアプリケーションです。そのため、選択したファイルに「削除された」メタデータプロパティを追加し、インデクサーを実行してインデックスからその情報を削除し、物理的にファイルを削除します。ここで

は、そのプロセスのためのコードです:

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

インデクサーを実行すると、即座にInProgress状態に移行しません。実際、サービスで実行されているインデクサーの数によっては、インデクサーの実行が予定されるまでにかなりの遅延が生じることがあります。したがって、ループの前にGetStatusを呼び出すと、インデクサーがまだInProgressではない可能性があり、Blobをあまりにも早く削除することになります。 より確実なアプローチは、インデクサーがこの特定の実行を完了するのを待つことです(LastResultのStartTime/EndTimeを調べるなど)。

+0

ありがとう、ユージーンありがとう。 – PhillipXT

関連する問題