在 Azure AI 搜尋服務中建立索引

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

在本文中了解定義和發佈搜尋索引的步驟。 建立索引時,系統會在搜尋服務上建立實體資料結構。 當索引定義存在,載入索引作業會以個別工作的形式執行。

必要條件

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

  • 了解您想要編製索引的資料。 建立索引是結構描述定義練習,因此您應該具有明確的想法,確認您想設定哪個來源欄位,使其具備可搜尋、可擷取、可篩選、可面向化和可排序等特性 (請參閱結構描述檢查清單以取得指引)。

    您也必須在來源資料中具有唯一欄位,其可用於索引中的文件索引鍵 (或識別碼)

  • 穩定的索引位置。 目前不支援將現有索引移至不同的搜尋服務。 重新瀏覽應用程式需求,並確定您現有的搜尋服務、其容量和位置皆已符合需求。

  • 最後,針對您所能建立的物件數目,所有服務層級都具有索引限制。 例如,如果在免費層上進行實驗,則您在任何指定時間都只能使用三個索引。 索引內的複雜欄位和集合數目會有所限制。

文件索引鍵

搜尋索引會具備一個必要欄位:文件索引鍵。 文件索引鍵是搜尋文件的唯一識別碼。 在 Azure AI 搜尋服務中,文件索引鍵必須是字串,而且必須源自資料來源中的唯一值,提供要編製索引的內容。 搜尋服務不會產生索引鍵值,但在某些案例中(例如 Azure 數據表索引器)會合成現有的值,為編製索引的檔建立唯一索引鍵。

在累加式索引編製期間,當新和更新的內容完成索引編製,系統就會新增具有新索引鍵的內送文件,或者合併或覆寫具有現有索引鍵的內送文件,上述情形是取決於索引欄位是否已填入資料或為 Null。

結構描述檢查清單

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

  1. 請檢閱命名慣例,讓索引和欄位名稱符合命名規則。

  2. 請檢閱支援的資料類型。 資料類型會影響欄位的使用方式。 例如,您可以篩選數值內容,但無法搜尋全文。 最常見的資料類型為 Edm.String,該類型用於可搜尋的文字,並使用全文搜尋引擎進行權杖化和查詢。

  3. 識別文件索引鍵。 文件索引鍵是索引需求。 其是單一字串欄位,而且會從包含唯一值的來源資料欄位進行填入。 例如,如果您要從 Blob 儲存體編製索引,則中繼資料儲存體路徑通常會用來作為文件索引鍵,因為該路徑會唯一識別容器中的每個 Blob。

  4. 在資料來源中識別特定欄位,這些欄位會提供索引中的可搜尋內容。 可搜尋內容包括使用全文搜尋引擎所查詢的短或長字串。 如果內容較詳細 (簡短片語或較長的句構),請使用不同的分析器進行實驗,以查看文字的權杖化方式。

    欄位屬性指派會決定搜尋行為,以及搜尋服務上索引的實體表示法。 許多客戶會反覆決定欄位的指定方式。 若要加速流程,請使用範例資料來執行作業,以便輕鬆進行卸除和重建。

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

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

    • 由於系統會以任意順序傳回可篩選欄位,因此也請考慮將欄位設為可排序。

  6. 決定是否要使用預設分析器 ("analyzer": null) 或不同的分析器。 分析器可用來在索引編製和查詢執行期間將文字欄位權杖化。

    若為多語言字串,請考慮語言分析器

    若為連字號連接的字串或特殊字元,請考慮特製化分析器。 其中一個範例是關鍵字,其會將欄位的整個內容視為單一語彙基元。 此行為適合用於郵遞區號、識別碼和產品名稱等資料。 如需詳細資訊,請參閱部分字詞搜尋和具有特殊字元的模式

注意

針對在索引編製期間權杖化的字詞,全文搜尋功能會在這些字詞間運行。 如果查詢無法傳回您預期的結果,請測試權杖化功能,以確認字串確實存在。 您可以在字串上嘗試使用不同的分析器,查看各種分析器產生權杖的方式。

建立索引

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

進行開發時,請考量頻繁進行的重建作業。 由於實體結構是在服務中建立,因此許多修改作業都需要卸除和重新建立索引。 您可以考慮處理部份的資料,讓重建更快速。

若透過入口網站來設計索引,便需要遵循特定資料類型的需求或結構描述規則,例如不允許數值欄位上具有全文搜尋功能。

  1. 登入 Azure 入口網站

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

    精靈是一種端對端工作流程,可建立索引子、資料來源和已完成的索引。 同時也可以載入資料。 如果這不是您想要的功能,請改用 [新增索引]

下列螢幕擷取畫面醒目提示命令列上的 [新增索引] 和 [匯入資料]。 建立索引之後,您可以在 [索引] 索引標籤中再次找到該索引。

新增索引命令

提示

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

針對跨來源查詢來設定 corsOptions

索引結構描述包含設定 corsOptions 的區段。 根據預設,用戶端 JavaScript 無法呼叫任何 API,因為瀏覽器會阻止所有跨原始來源的要求。 若要允許對索引進行跨原始來源查詢,請設定 corsOptions 屬性來啟用 CORS (跨原始來源資源共用)。 基於安全緣故,僅查詢 API 才能支援 CORS。

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

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

  • allowedOrigins (必要):這是被允許存取索引的原始來源清單。 允許從這些原始來源提供的 JavaScript 程式碼查詢您的索引 (假設呼叫者提供有效的金鑰或具有權限)。 每個原始來源的形式通常是 protocol://<fully-qualified-domain-name>:<port> (儘管經常會忽略 <port>)。 如需詳細資訊,請參閱 跨原始來源資源共用 (Wikipedia)

    如果您想要允許所有原始來源進行存取,請在 allowedOrigins 陣列中包含 * 作為單一項目。 「此做法並不建議用於實際執行環境搜尋服務」,但對於開發和偵錯作業通常很有幫助。

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

現有索引上允許的更新

建立索引會在搜尋服務上建立實體資料結構 (檔案和反轉的索引)。 建立索引之後,您可以使用更新索引來影響變更,這是取決於修改內容是否會讓這些實體結構無效。 在索引中建立欄位之後,就無法變更大部分的欄位屬性。

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

為了將設計程序中的流失情形最小化,下表說明結構描述中固定和彈性的元素。 變更固定元素需要重建索引,而彈性元素則可以隨時變更,不會影響實體實作。

Element 可以更新嗎?
名稱 No
機碼 No
欄位名稱和類型 No
欄位屬性 (可搜尋、可篩選、可面向化、可排序) No
欄位屬性 (可擷取) Yes
分析器 您可以在索引中新增和修改自訂分析器。 針對字串欄位的分析器指派,您只能修改 searchAnalyzer。 所有其他指派和修改都需要重建。
評分設定檔 Yes
建議工具 No
跨原始來源資源分享 (CORS) Yes
加密 Yes

下一步

請參閱下列連結中的文章,了解如何使用資料來載入索引,或使用同義字對應來擴充索引。