Azure AI 搜尋服務中的知識存放區「投影」
投影定義了知識存放區中的實體資料表、物件和檔案,可接受 Azure AI 搜尋服務擴充管線中的內容。 如果您要建立知識存放區,大部分的工作皆是定義和成形投影。
本文介紹投影概念和工作流程,讓您在開始撰寫程式碼之前先了解一些背景知識。
投影是在認知搜尋技能集中定義,但最終結果是 Azure AI 儲存體中的資料表、物件和影像檔投影。
投影和使用方式的類型
知識存放區是邏輯建構,實際表示為 Azure 儲存體中資料表、JSON 物件或二進位影像檔的鬆散集合。
Projection | 儲存體 | 使用方式 |
---|---|---|
表格 | Azure 資料表儲存體 | 用於最能表示為資料行和資料行的資料,或當您需要資料細微表示時 (例如,資料框架)。 資料表投影可讓您使用塑形器技能定義架構化圖形,或使用內嵌塑形來指定資料行和資料列。 您可以根據熟悉的正規化原則,將內容組織成多個資料表。 相同群組中的資料表會自動相關。 |
物件 | Azure Blob 儲存體 | 當您需要在一個 JSON 文件中完整 JSON 表示資料和擴充時使用。 如同資料表投影,只有有效的 JSON 物件可以投影為物件,而塑形可協助您執行此動作。 |
檔案 | Azure Blob 儲存體 | 當您需要儲存正規化二進位影像檔時使用。 |
投影定義
投影是在技能集的「knowledgeStore」屬性下指定。 投影定義會在索引子調用期間使用,以擴充內容在 Azure 儲存體中建立和載入物件。 如果您不熟悉這些概念,請從 AI 擴充開始參閱簡介。
下列範例說明在 knowledgeStore 下投影的位置,以及基本建構。 名稱、類型和內容來源構成投影定義。
"knowledgeStore" : {
"storageConnectionString": "DefaultEndpointsProtocol=https;AccountName=<Acct Name>;AccountKey=<Acct Key>;",
"projections": [
{
"tables": [
{ "tableName": "ks-museums-main", "generatedKeyName": "ID", "source": "/document/tableprojection" },
{ "tableName": "ks-museumEntities", "generatedKeyName": "ID","source": "/document/tableprojection/Entities/*" }
],
"objects": [
{ "storageContainer": "ks-museums", "generatedKeyName": "ID", "source": "/document/objectprojection" }
],
"files": [ ]
}
]
投影群組
投影是複雜集合的陣列,這表示您可以指定每個類型的多個集合。 通常只使用一個投影群組,但如果儲存體需求包含支援不同的工具和案例,您可能會使用多個投影群組。 例如,您可以使用一個群組來設計和偵錯技能集,第二組收集用於線上應用程式的輸出,而第三組則用於資料科學工作負載。
相同的技能集輸出可用來填入投影下的所有群組。 以下範例顯示兩個項目。
"knowledgeStore" : {
"storageConnectionString": "DefaultEndpointsProtocol=https;AccountName=<Acct Name>;AccountKey=<Acct Key>;",
"projections": [
{
"tables": [],
"objects": [],
"files": []
},
{
"tables": [],
"objects": [],
"files": []
}
]
}
投影群組具有下列相互獨佔性和相關性的主要特性。
準則 | 描述 |
---|---|
相互獨佔性 | 每個群組會與其他群組完全隔離,以支援不同的資料成形案例。 例如,如果您要測試不同的資料表結構和組合,您可以將每個集合放在不同的投影群組中以進行 AB 測試。 每個群組都會從相同的來源 (擴充樹狀結構) 取得資料,但與任何對等投影群組的資料表-物件-檔案組合完全隔離。 |
相關性 | 在投影群組中,資料表、物件和檔案中的內容都有相關。 知識存放區會使用產生的索引鍵作為通用父節點參考點。 例如,假設您有包含影像和文字的文件。 您可以將文字投影到資料表,並將影像投影到二進位檔案,而且資料表和物件都有包含檔案 URL 的資料行/屬性。 |
投影「來源」
來源參數是投影定義的第三個元件。 因為投影會儲存來自 AI 擴充管線的資料,所以投影的來源一律是技能的輸出。 因此,輸出可能是單一欄位 (例如翻譯的文字欄位),但通常是資料圖形的參考。
資料圖形來自您的技能集。 在 Azure AI 搜尋服務中提供的所有內建技能中,有一個稱為塑形器技能的公用程式技能,可用來建立資料圖形。 您可以包含塑形器技能 (數目視您需要而定),以支援知識存放區中的投影。
圖形經常與表格投影搭配使用,其中圖形不僅指定哪些資料列會進入資料表,也指定會建立哪些資料行 (您也可以將圖形傳遞至物件投影)。
圖形可能很複雜,而且不在本次深入討論的範圍內,但下列範例會簡短說明基本圖形。 塑形器技能輸出會指定為資料表投影的來源。 在資料表投影本身內,將會是「metadata-storage_path」、「reviews_text」、「reviews_title」等資料行,如圖形中所指定。
{
"@odata.type": "#Microsoft.Skills.Util.ShaperSkill",
"name": "ShaperForTables",
"description": null,
"context": "/document",
"inputs": [
{
"name": "metadata_storage_path",
"source": "/document/metadata_storage_path",
"sourceContext": null,
"inputs": []
},
{
"name": "reviews_text",
"source": "/document/reviews_text"
},
{
"name": "reviews_title",
"source": "/document/reviews_title"
},
{
"name": "reviews_username",
"source": "/document/reviews_username"
},
],
"outputs": [
{
"name": "output",
"targetName": "mytableprojection"
}
]
}
投影生命週期
投影生命週期會繫結至資料來源中的來源資料。 當來源資料更新並重新編制索引時,會使用擴充的結果來更新投影,以確保您的預測最終與您資料來源中的資料一致。 不過,投影也會獨立儲存在 Azure 儲存體中。 刪除索引子或搜尋服務本身時,將不會刪除這些投影。
在應用程式中取用
執行索引子之後,請連線至投影,並取用其他應用程式和工作負載中的資料。
使用 Azure 入口網站,驗證在 Azure 儲存體中的物件建立。
使用 Power BI 進行資料探索。 當資料位於 Azure 資料表儲存體時,此工具最適合使用。 在 Power BI 中,您可以將資料操作為更容易查詢和分析的新資料表。
在資料科學管線中使用 Blob 容器中的擴充資料。 例如,您可以將 Blob 中的資料載入 Pandas DataFrame。
最後,如果您需要從知識存放區匯出資料,Azure Data Factory 具有連接器可匯出資料,並將其放入您選擇的資料庫中。
開始使用的檢查清單
回想一下,投影專屬於知識存放區,而且不會用來建構搜尋索引。
在 Azure 儲存體中,從存取金鑰取得連接字串,並確認帳戶是 StorageV2 (一般用途 V2)。
在 Azure 儲存體中,請熟悉容器和資料表中現有的內容,以便您為投影選擇非衝突名稱。 知識存放區是資料表和容器的鬆散集合。 請考慮採用命名慣例來追蹤相關物件。
在 Azure AI 搜尋服務中,在索引子中啟用擴充快取 (預覽),然後執行索引子來執行技能集並填入快取。 這是預覽功能,因此請務必在索引子要求上使用預覽 REST API。 填入快取之後,您就可以免費修改知識存放區中的投影定義 (只要技能本身未修改)。
在您的程式碼中,所有投影只會在技能集中定義。 沒有套用至投影的索引子屬性 (例如欄位對應或輸出欄位對應)。 在技能集定義中,您將著重於兩個領域:knowledgeStore 屬性和技能陣列。
在 knowledgeStore 下,指定
projections
區段中的資料表、物件、檔案投影。 本節中會 (依您定義的投影數目) 決定物件類型、物件名稱和數量。從技能陣列中,判斷每個投影的
source
中應參考哪些技能輸出。 所有投影都有來源。 來源可以是上游技能的輸出,但通常是塑形器技能的輸出。 投影的組合是透過圖形來決定。
在 Azure 儲存體中檢查您的結果。 後續執行時,請刪除 Azure 儲存體中的物件或變更技能集中的專案名稱,以避免命名衝突。
如果您使用資料表投影,請檢查了解表格服務資料模型和資料表儲存體的延展性和效能目標,以確定您的資料需求位於資料表儲存體的文件限制內。
下一步
檢閱每個投影類型的語法和範例。