在 Azure AI 搜尋中建立索引

在 Azure AI 搜尋服務中,查詢要求會以搜尋索引中的可搜尋文字為目標。

在本文中,瞭解定義及發佈搜尋索引的步驟。 建立索引會在您的搜尋服務上建立實體數據結構。 索引定義存在之後, 載入索引 會接著做為個別的工作。

必要條件

  • 寫入許可權。 您可以透過 要求上的系統管理員 API 金鑰 來授與許可權。 或者,如果您使用 角色型訪問控制,請以搜尋參與者角色的成員身分傳送要求。

  • 瞭解您想要編製索引的數據。 建立索引是架構定義練習,因此您應該清楚瞭解要讓哪些來源字段可供搜尋、可擷取、可篩選、可Facet和可排序(請參閱 架構檢查清單 以取得指引)。

    您也必須在源數據中具有唯一字段,才能做為索引中的檔索引鍵(或標識符)。

  • 穩定的索引位置。 現成不支援將現有的索引移至不同的搜尋服務。 重新瀏覽應用程式需求,並確定您現有的搜尋服務、其容量和位置都足以滿足您的需求。

  • 最後,所有服務層級都有 您可以建立的物件數目的索引限制 。 例如,如果您要在免費層上實驗,您隨時只能有三個索引。 在索引本身內,複雜欄位和集合的數目有限制。

檔索引鍵

搜尋索引有一個必要字段:檔索引鍵。 檔索引鍵是搜尋檔的唯一標識碼。 在 Azure AI 搜尋服務中,它必須是字串,而且必須源自數據源中提供要編製索引之內容的唯一值。 搜尋服務不會產生索引鍵值,但在某些情況下(例如 Azure 數據表索引器)會合成現有的值,為編製索引的檔建立唯一索引鍵。

在累加式索引編製期間,新增和更新內容時,會新增具有新索引鍵的內送檔,而具有現有索引鍵的內送檔會合併或覆寫,視索引欄位為 Null 或填入而定。

架構檢查清單

使用此檢查清單來協助搜尋索引的設計決策。

  1. 檢閱 命名慣例 ,讓索引和功能變數名稱符合命名規則。

  2. 檢閱 支持的數據類型。 數據類型會影響欄位的使用方式。 例如,數值內容是可篩選的,但無法搜尋全文檢索。 最常見的數據類型是 Edm.String 用於可搜尋的文字,其會使用全文搜尋引擎進行標記化和查詢。

  3. 識別檔索引鍵。 檔索引鍵是索引需求。 它是單一字串字位,而且會從包含唯一值的源數據欄位填入。 例如,如果您要從 Blob 儲存體 編製索引,元數據記憶體路徑通常會作為檔索引鍵,因為它會唯一識別容器中的每個 Blob。

  4. 識別數據源中參與索引中可搜尋內容的欄位。 可搜尋的內容包含使用全文搜尋引擎查詢的簡短或長字串。 如果內容是詳細資訊(小詞組或較大的區塊),請試驗不同的分析器,以查看文字的標記化方式。

    欄位屬性指派會 決定搜尋行為和搜尋服務上索引的實體表示法。 判斷應該如何指定欄位,是許多客戶的反覆程式。 若要加速反覆專案,請從範例數據開始,以便輕鬆卸除和重建。

  5. 識別哪些來源欄位可作為篩選。 數值內容和簡短文字欄位,特別是具有重複值的值,是不錯的選擇。 使用篩選時,請記住:

    • 可篩選的欄位可以選擇性地用於多面向導覽。

    • 可篩選的欄位會依任意順序傳回,因此也請考慮讓字段排序。

  6. 判斷要使用預設分析器 ("analyzer": null) 或不同的分析器。 分析器可用來在索引編製和查詢執行期間標記文字欄位。

    針對多語種字串,請考慮 語言分析器

    對於連字元字串或特殊字元,請考慮 特殊分析器。 其中一個範例是 關鍵詞 ,會將字段的整個內容視為單一標記。 此行為適用於郵遞區號、標識碼和某些產品名稱等數據。 如需詳細資訊,請參閱 部分字詞搜尋和具有特殊字元的模式。

注意

全文搜索會透過索引編製期間標記化的字詞進行。 如果您的查詢無法傳回您預期的結果, 請測試令牌化 以確認字串確實存在。 您可以在字串上嘗試不同的分析器,以查看如何為各種分析器產生令牌。

建立索引

當您準備好建立索引時,請使用可傳送要求的搜尋用戶端。 您可以使用 Azure 入口網站 或 REST API 進行早期開發和概念證明測試。

在開發期間,規劃經常重建。 因為實體結構是在服務中建立的, 因此需要卸除和重新建立索引 ,才能進行許多修改。 您可以考慮使用數據的子集,讓重建更快速。

透過入口網站進行索引設計會針對特定數據類型強制執行需求和架構規則,例如不允許數值欄位的全文搜尋功能。

  1. 登入 Azure 入口網站

  2. 在搜尋服務 [概觀] 頁面中,選擇其中一個選項來建立搜尋索引:

    精靈是一個端對端工作流程,可建立索引器、數據源和已完成的索引。 它也會載入數據。 如果這比您想要的還要多,請改用 [新增索引 ]。

下列螢幕快照會醒目提示 命令行上出現 [新增索引 ] 和 [匯入數據 ] 的位置。 建立索引之後,您可以在 [索引] 索引標籤中再次找到它。

Add index command

提示

在入口網站中建立索引之後,您可以複製 JSON 表示法,並將其新增至您的應用程式程式代碼。

設定 corsOptions 跨原始來源查詢

索引架構包含用於設定 corsOptions的區段。 根據預設,用戶端 JavaScript 無法呼叫任何 API,因為瀏覽器會防止所有跨原始來源要求。 若要允許跨原始來源查詢到您的索引,請藉由設定 corsOptions 屬性來啟用CORS(跨原始來源資源分享)。 基於安全性考慮,只有 查詢 API 支援 CORS。

"corsOptions": {
  "allowedOrigins": [
    "*"
  ],
  "maxAgeInSeconds": 300

您可以為 CORS 設定下列屬性:

  • allowedOrigins (必要):這是允許存取索引的來源清單。 允許從這些來源提供的 JavaScript 程式代碼查詢您的索引(假設呼叫端提供有效的索引鍵或具有許可權)。 雖然通常省略每個原始來源,但<port>通常都是窗體protocol://<fully-qualified-domain-name>:<port>。 如需詳細資訊,請參閱跨原始來源資源分享(維琪百科)。

    如果您想要允許存取所有原始來源,請在 * allowedOrigins陣列包含為單一專案。 這不是生產搜尋服務 的建議做法,但它通常適用於開發和偵錯。

  • maxAgeInSeconds (選擇性):瀏覽器會使用此值來判斷快取 CORS 預檢回應的持續時間(以秒為單位)。 這必須是非負整數。 較長的快取期間可提供更佳的效能,但它會延長 CORS 原則需要生效的時間量。 如果未設定此值,則會使用預設持續時間 5 分鐘。

現有索引的允許更新

建立索引 會在您的搜尋服務上建立實體數據結構(檔案和反向索引)。 建立索引之後,使用更新索引影響變更的能力取決於修改是否使這些實體結構失效。 在索引中建立欄位之後,就無法變更大部分的欄位屬性。

或者,您可以 建立索引別名 ,以作為應用程式程式代碼中的穩定參考。 您可以更新索引別名,而不是更新程序代碼,以指向較新的索引版本。

為了將設計程式中的變換降到最低,下表描述架構中哪些元素是固定且具彈性的。 變更固定專案需要重建索引,而彈性專案可以隨時變更,而不會影響實體實作。

Element 可以更新嗎?
名稱 No
機碼 No
功能變數名稱和類型 No
欄位屬性(可搜尋、可篩選、可多面向、可排序) No
欄位屬性 (可擷取) Yes
分析器 您可以在索引中新增和修改自訂分析器。 關於欄位串欄位的分析器指派,您只能修改 searchAnalyzer。 所有其他指派和修改都需要重建。
評分配置檔 Yes
建議工具 No
跨原始來源遠端文稿 (CORS) Yes
加密 Yes

下一步

使用下列連結熟悉使用數據載入索引,或使用同義字對應擴充索引。