分享方式:


在 Azure AI 搜尋服務中使用 Azure 儲存體的索引子進行變更和刪除偵測

建立初始搜尋索引之後,您可能會希望後續的索引子工作只挑出新的和變更的文件。 針對源自 Azure 儲存體的索引內容,變更偵測會自動執行,因為索引子會使用 Azure 儲存體中物件和檔案的內建時間戳記來追蹤最後一次更新。

雖然變更偵測一定會自動執行,但刪除偵測則不會。 索引子不會追蹤資料來源中的物件刪除。 為了避免出現孤立的搜尋文件,您可以實作「虛刪除」策略,先刪除搜尋文件,第二步再在 Azure 儲存體中進行實體刪除。

有兩種方式可以實作虛刪除策略:

刪除偵測策略應該從第一個索引子執行套用。 如果您在初始執行之前未建立刪除原則,則原則實作之前刪除的任何文件都會保留在索引中,即使您稍後將原則新增至索引子並重設它也一樣。 如果發生這種情況,建議您使用新的索引子建立新的索引,以確保刪除原則從頭開始就已就緒。

必要條件

  • 針對 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 屬性或 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 設定刪除偵測原則。

  1. 登入 Azure 入口網站

  2. 在 [Azure AI 搜尋服務概觀] 頁面上,移至 [新增資料來源],這是用來指定資料來源定義的視覺化編輯器。

    下列螢幕擷取畫面顯示您可以在入口網站中找到這些功能的位置。

    [匯入資料精靈] 中資料來源設定的螢幕擷取畫面。

  3. 在 [新增資料來源] 表單上,填寫必要的欄位,選取 [追蹤刪除] 核取方塊,然後選擇 [原生 Blob 虛刪除]。 然後按一下 [儲存] 以啟用資料來源建立上的功能。

    入口網站資料來源原生虛刪除的螢幕擷取畫面。

使用原生虛刪除原則重新為未刪除的 Blob 編製索引

如果您在 Blob 儲存體中還原虛刪除的 Blob,索引子不一定會重新編製索引。 這是因為索引子會使用 Blob 的 LastModified 時間戳記來判斷是否需要編製索引。 在虛刪除的 Blob 未刪除時,其 LastModified 時間戳記不會更新,因此,如果索引子已經處理具有較新 LastModified 時間戳記的 Blob,就不會重編製索引未刪除 Blob 的索引。

若要確保為未刪除的 Blob 重新編製索引,您必須更新 Blob 的 LastModified 時間戳記。 其中一種方法是重新儲存該 Blob 的中繼資料。 您不需要變更中繼資料,但重新儲存中繼資料會更新 Blob 的 LastModified 時間戳記,告知索引子要挑出該 Blob。

使用自訂中繼資料的虛刪除策略

這個方法會使用自訂中繼資料來指出搜尋文件是否應從索引中移除。 它需要兩個不同的動作:從索引中刪除搜尋文件,然後從 Azure 儲存體中刪除檔案。

此功能已正式發行。

Azure 儲存體和 Azure AI 搜尋服務中都有要遵循的步驟,但沒有其他的功能相依性。

  1. 在 Azure 儲存體中,將自訂中繼資料機碼值組新增至檔案,以指出已標示為要刪除的檔案。 例如,您可以將屬性命名為 "IsDeleted",設為 false。 當您想刪除檔案時,請將其變更為 true。

  2. 在 Azure AI 搜尋服務中,編輯資料來源定義以包含 "dataDeletionDetectionPolicy" 屬性。 例如,如果 blob 有值為 trueIsDeleted 中繼資料屬性,則下列原則會認為檔案應遭刪除:

    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"
        }
    }
    
  3. 執行索引子。 在索引子處理檔案,並從搜尋索引中刪除文件之後,您就可以在 Azure 儲存體中刪除實體檔案。

為未刪除的 Blob 和檔案重新編製索引

如果原始來源檔案仍實體存在於 Azure 儲存體中,您可以反轉虛刪除。

  1. 變更 Azure 儲存體中 Blob 或檔案上的 "softDeleteMarkerValue" : "false"

  2. 檢查 Blob 或檔案的 LastModified 時間戳記,使其比上次索引子執行的時間還新。 您可以藉由重新儲存現有的中繼資料,強制更新為目前的日期和時間。

  3. 執行索引子。

下一步