將資料載入 Azure AI 搜尋服務中的搜尋索引
本文會說明如何在預先定義的搜尋索引中匯入文件。 在 Azure AI 搜尋服務中,首先建立搜尋索引,接著匯入資料做為第二個步驟。 例外狀況是入口網站中的匯入精靈和索引子管線,這會在一個工作流程中建立和載入索引。
資料匯入的運作方式
搜尋服務接受符合索引架構的 JSON 文件。 搜尋服務會以 JSON 匯入純文字和向量並編制其索引,用於全文檢索搜尋、向量搜尋和知識採礦案例。
純文字內容可從外部資料來源中的英數字元欄位、搜尋案例中有用的中繼資料,或技能集 (技能可以影像和非結構化內容擷取或推斷文字描述) 所建立的豐富內容中取得。
您可以自行準備這些文件,但如果內容位於支援的資料來源中,則執行索引子或 [匯入精靈] 都可以將文件擷取、JSON 序列化和編制索引自動化。
一旦編制資料的索引,索引的實體資料結構就會鎖定在 其中。 如需可變更和無法變更的指導,請參閱 更新和重建索引。
索引編制不是背景程序。 搜尋服務會平衡索引編制和查詢工作負載,但如果查詢延遲太高,您可以新增容量或識別載入索引的低查詢活動期間。
如需詳細資訊,請參閱 資料匯入策略。
使用 Azure 入口網站
在 Azure 入口網站中,使用匯入精靈以在無縫工作流程中建立和載入索引。 如果您想要載入現有的索引,請選擇替代方法。
使用您的 Azure 帳戶登入 Azure 入口網站,然後找出您的搜尋服務。
在 [概觀] 頁面,選取命令列上的 [匯入資料] 或 [匯入和向量化資料],以建立並填入搜尋索引。
您可以遵循下列連結來檢閱工作流程:快速入門:建立 Azure AI 搜尋索引和快速入門:整合向量化。
提示
匯入精靈會建立並執行索引器。 如果已定義索引子,您可以從 Azure 入口網站重設並執行索引子,這在您以累加方式新增欄位時很有用。 重設會強制索引子重新開始,從所有來源文件中挑選所有欄位。
使用 REST API
文件 - 索引 是用來將資料匯入搜尋索引的 REST API。 REST API 適用於初始概念證明測試,您可以在其中測試編製索引工作流程,而不需要撰寫許多程序碼。 參數 @search.action
會根據特定欄位的新值或替換值,判定文件是完整還是部分新增。
快速入門:使用 REST 的文字搜尋 說明這些步驟。 下列範例是範例的修改版本。 為簡潔目的已對其進行了刪減,並且更改了第一個 HotelId 值以避免覆寫現有的文件。
撰寫一個指定索引名稱的 POST 呼叫、"docs/index" 端點和一個包含
@search.action
參數的要求本文。POST https://[service name].search.windows.net/indexes/hotels-sample-index/docs/index?api-version=2024-07-01 Content-Type: application/json api-key: [admin key] { "value": [ { "@search.action": "upload", "HotelId": "1111", "HotelName": "Stay-Kay City Hotel", "Description": "The hotel is ideally located on the main commercial artery of the city in the heart of New York. A few minutes away is Time's Square and the historic centre of the city, as well as other places of interest that make New York one of America's most attractive and cosmopolitan cities.", "Category": "Boutique", "Tags": [ "pool", "air conditioning", "concierge" ] }, { "@search.action": "mergeOrUpload", "HotelId": "2", "HotelName": "Old Century Hotel", "Description": "This is description is replacing the original one for this hotel. New and changed values overwrite the previous ones. In a comma-delimited list like Tags, be sure to provide the full list because there is no merging of values within the field itself.", "Category": "Boutique", "Tags": [ "pool", "free wifi", "concierge", "my first new tag", "my second new tag" ] } ] }
將
@search.action
參數設定為upload
以建立或覆寫文件。 如果您的目標是更新文件中的特定欄位,請將它設定為merge
或uploadOrMerge
。 上一個範例顯示這兩個動作。動作 效果 合併 更新已經存在的文件,並讓找不到的文件失效。 合併會取代現有的值。 基於這個原因,請務必檢查包含多個值的集合欄位,例如類型為 Collection(Edm.String)
的欄位。 例如,如果tags
欄位以["budget"]
的值開始,而且使用["economy", "pool"]
執行合併,則tags
欄位的最終值為["economy", "pool"]
。 其不會是["budget", "economy", "pool"]
。mergeOrUpload 如果文件存在,行為會和合併一樣,如果是新文件,則會上傳。 這是累加式更新最常見的動作。 上傳 類似 "upsert",如果是新文件,就會插入該文件,如果文件已經存在,則會更新或取代該文件。 如果文件遺漏索引所需的值,則文件欄位的值會設定為 null。 傳送要求。
查閱文件 (您剛將其新增為驗證步驟):
GET https://[service name].search.windows.net/indexes/hotel-sample-index/docs/1111?api-version=2024-07-01
當文件索引鍵或 ID 是新的時,null 會成為文件中未指定之任何欄位的值。 對於現有文件上的動作,更新的值會取代先前的值。 在 "merge" 或 "mergeUpload" 中未指定的任何欄位,在搜尋索引中都會保持不變。
使用 Azure SDK
可由程式處理的能力是由下列 Azure SDK 提供。
適用於 .NET 的 Azure SDK 會提供下列 API 以用來將簡單和大量文件上傳至索引中:
有數個範例說明簡單和大規模索引編制內容中的索引編制:
「載入索引」說明基本步驟。
來自 Azure SDK 小組的 Azure.Search.Documents 範例 - 編制文件的索引會新增 SearchIndexingBufferedSender。
教學課程:編制任何資料的索引會將大量索引編制與測試策略結合起來以確定最佳大小。
請務必檢查 azure-search-vector-samples 存放庫,以取得示範如何為向量欄位編製索引的程式碼範例。