在 Azure AI 搜尋服務中使用 Azure 儲存體的索引子進行變更和刪除偵測
建立初始搜尋索引之後,您可能會希望後續的索引子工作只挑出新的和變更的文件。 針對源自 Azure 儲存體的索引內容,變更偵測會自動執行,因為索引子會使用 Azure 儲存體中物件和檔案的內建時間戳記來追蹤最後一次更新。
雖然變更偵測一定會自動執行,但刪除偵測則不會。 索引子不會追蹤資料來源中的物件刪除。 為了避免出現孤立的搜尋文件,您可以實作「虛刪除」策略,先刪除搜尋文件,第二步再在 Azure 儲存體中進行實體刪除。
有兩種方式可以實作虛刪除策略:
- 原生 Blob 虛刪除 (預覽),僅適用於 Blob 儲存體
- 使用自訂中繼資料進行虛刪除
刪除偵測策略應該從第一個索引子執行套用。 如果您在初始執行之前未建立刪除原則,則原則實作之前刪除的任何文件都會保留在索引中,即使您稍後將原則新增至索引子並重設它也一樣。 如果發生這種情況,建議您使用新的索引子建立新的索引,以確保刪除原則從頭開始就已就緒。
必要條件
針對 Blob 儲存體、資料表儲存體、檔案儲存體或 Data Lake Storage Gen2 使用 Azure 儲存體索引子
使用一致的文件索引碼和檔案結構。 變更文件索引碼或目錄名稱和路徑 (適用至 ADLS Gen2) 會破壞內部追蹤資訊,索引子需要這些資訊來得知哪些內容已編製索引,以及最後一次編製索引的時間。
注意
ADLS Gen2 允許目錄重新命名。 重新命名目錄時,該目錄中 Blob 的時間戳記不會更新。 因此,索引子不會重新編製這些 Blob 的索引。 如果您需要在目錄重新命名之後為 Blob 重新編製索引,因為它們現在具有新的 URL,您必須更新目錄中所有 Blob 的 LastModified
時間戳記,索引子才知道要在未來執行期間重新編製索引。 Azure Blob 儲存體中的虛擬目錄無法變更,因此它們不會有這各問題。
原生 Blob 虛刪除
針對此刪除偵測方法,Azure AI 搜尋服務需依賴 Azure Blob 儲存體中的原生 Blob 虛刪除功能,來判斷 Blob 是否已轉換為虛刪除狀態。 當 Blob 處於此狀態時,搜尋索引子會使用這項資訊將對應的文件從索引中移除。
原生虛刪除的需求
Blob 必須位於 Azure Blob 儲存體容器中。 ADLS Gen2 或 Azure 檔案儲存體中的 Blob 不支援 Azure AI 搜尋服務的原生 Blob 虛刪除原則。
索引中文件的文件索引碼必須對應至 Blob 屬性或 Blob 中繼資料,例如 "metadata_storage_path"。
您必須使用預覽 REST API (例如
2024-05-01-preview
),或 Azure 入口網站中的索引子資料來源設定來設定虛刪除的支援。Blob 版本設定不得在儲存體帳戶中啟用。 否則,設計上不支援原生虛刪除。
設定原生虛刪除
在 Blob 儲存體中,根據需求啟用虛刪除時,請將保留原則設定為遠高於索引子間隔排程的值。 如果執行索引子時發生問題,或者如果您有大量文件需要編製索引,索引子最終才有足夠的時間處理虛刪除的 Blob。 Azure AI 搜尋服務索引子只有在所處理的 Blob 處於虛刪除狀態時,才會從索引中刪除文件。
在 Azure AI 搜尋服務中,於資料來源上設定原生 Blob 虛刪除偵測原則。 您可以從 Azure 入口網站或使用預覽 REST API (2024-05-01-preview
) 來執行此動作。 下列指示說明如何在 Azure 入口網站或透過 REST API 設定刪除偵測原則。
登入 Azure 入口網站。
在 [Azure AI 搜尋服務概觀] 頁面上,移至 [新增資料來源],這是用來指定資料來源定義的視覺化編輯器。
下列螢幕快照顯示您可以在 Azure 入口網站 中找到這項功能的位置。
在 [新增資料來源] 表單上,填寫必要的欄位,選取 [追蹤刪除] 核取方塊,然後選擇 [原生 Blob 虛刪除]。 然後按一下 [儲存] 以啟用資料來源建立上的功能。
使用原生虛刪除原則重新為未刪除的 Blob 編製索引
如果您在 Blob 儲存體中還原虛刪除的 Blob,索引子不一定會重新編製索引。 這是因為索引子會使用 Blob 的 LastModified
時間戳記來判斷是否需要編製索引。 在虛刪除的 Blob 未刪除時,其 LastModified
時間戳記不會更新,因此,如果索引子已經處理具有較新 LastModified
時間戳記的 Blob,就不會重編製索引未刪除 Blob 的索引。
若要確保為未刪除的 Blob 重新編製索引,您必須更新 Blob 的 LastModified
時間戳記。 其中一種方法是重新儲存該 Blob 的中繼資料。 您不需要變更中繼資料,但重新儲存中繼資料會更新 Blob 的 LastModified
時間戳記,告知索引子要挑出該 Blob。
使用自訂中繼資料的虛刪除策略
這個方法會使用自訂中繼資料來指出搜尋文件是否應從索引中移除。 它需要兩個不同的動作:從索引中刪除搜尋文件,然後從 Azure 儲存體中刪除檔案。
此功能已正式發行。
Azure 儲存體和 Azure AI 搜尋服務中都有要遵循的步驟,但沒有其他的功能相依性。
在 Azure 儲存體中,將自訂中繼資料機碼值組新增至檔案,以指出已標示為要刪除的檔案。 例如,您可以將屬性命名為 "IsDeleted",設為 false。 當您想刪除檔案時,請將其變更為 true。
在 Azure AI 搜尋服務中,編輯資料來源定義以包含 "dataDeletionDetectionPolicy" 屬性。 例如,如果 blob 有值為
true
的IsDeleted
中繼資料屬性,則下列原則會認為檔案應遭刪除:PUT https://[service name].search.windows.net/datasources/file-datasource?api-version=2024-07-01 { "name" : "file-datasource", "type" : "azurefile", "credentials" : { "connectionString" : "<your storage connection string>" }, "container" : { "name" : "my-share", "query" : null }, "dataDeletionDetectionPolicy" : { "@odata.type" :"#Microsoft.Azure.Search.SoftDeleteColumnDeletionDetectionPolicy", "softDeleteColumnName" : "IsDeleted", "softDeleteMarkerValue" : "true" } }
執行索引子。 在索引子處理檔案,並從搜尋索引中刪除文件之後,您就可以在 Azure 儲存體中刪除實體檔案。
為未刪除的 Blob 和檔案重新編製索引
如果原始來源檔案仍實體存在於 Azure 儲存體中,您可以反轉虛刪除。
變更 Azure 儲存體中 Blob 或檔案上的
"softDeleteMarkerValue" : "false"
。檢查 Blob 或檔案的
LastModified
時間戳記,使其比上次索引子執行的時間還新。 您可以藉由重新儲存現有的中繼資料,強制更新為目前的日期和時間。執行索引子。