利用分析器和語彙基元化的字詞改善索引
Azure AI 搜尋服務預設會設定為分析文字,並識別在您的索引中有幫助的權杖。 正確的權杖可確保使用者快速找到所需的文件。 在大部分情況下,預設組態會產生最佳索引。 不過,當您有不尋常的或唯一欄位時,您可能會想要設定文字的確切分析方式。
在這裡,您將了解如何定義自訂分析器,以控制欄位內容如何分割成權杖,以包含在索引中。
AI 搜尋中的分析器
當 AI 搜尋為您的內容編制索引時,其會擷取文字。 若要建置有用的索引,其字詞可協助使用者找出文字需要處理的文件。 例如:
- 文字應該分成字詞,通常使用空白和標點符號字元做為分隔符號。
- 因為使用者不會搜尋停用字詞 (例如 "the" 和 "it"),所以它們都應該移除。
- 字詞應該縮減成其根本形式。 例如,過去式的字詞 (例如 "ran"),應該以現在式字詞取代 (例如 "run")。
在 AI 搜尋中,這種處理是由分析器執行。 如果您未指定欄位的分析器,則會使用預設的 Lucene 分析器。 因為預設 Lucene 分析器可以處理許多語言,並傳回索引的實用權杖,所以其為大部分欄位的絕佳選擇。
或者,您可以指定 AI 搜尋內建的其中一個分析器。 內建分析器有兩種類型:
- 語言分析器。 如果您需要特定語言的進階功能,例如詞形歸併還原、字組分解和實體辨識,請使用內建語言分析器。 Microsoft 提供 50 種用於不同語言的分析器。
- 特製化分析器。 這些分析器與語言無關,並用於特殊欄位,例如郵遞區號或產品識別碼。 例如,您可以使用 PatternAnalyzer 並指定規則運算式來比對權杖分隔符號。
什麼是自訂分析器?
內建分析器可提供許多選項,但有時候您需要針對欄位使用具有不尋常行為的分析器。 在這些情況下,您可以建立自訂分析器。
自訂分析器包含:
- 字元篩選。 這些篩選會先處理字串,再傳至權杖化工具。
- 權杖化工具。 這些元件會將文字分割成權杖,以新增至索引。
- 權杖篩選。 這些篩選會移除或修改權杖化工具所發出的權杖。
讓我們更加深入地檢驗這些元件。
字元篩選
部分作業可能需要在文字上完成,才能分割成權杖。 字元篩選可實現這些作業。 您可以使用下列三個字元篩選:
- html_strip。 此篩選會移除 HTML 建構,例如標籤和屬性。
- mapping。 此篩選可讓您指定對應,以另一個字串取代一個字串。 例如,您可以指定以 Texas 取代 TX 的對應。
- pattern_replace。 此篩選可讓您指定規則運算式,可識別輸入文字中的模式,以及應該如何取代相符的文字。
權杖化工具
權杖化工具是一種元件,可將文字分割為將儲存在索引中的權杖。 權杖化工具也會將字詞細分成其根本形式。 權杖通常是單一字詞,但您可能想要建立不尋常的權杖,例如:
- 完整的郵政位址。
- 完整的 URL 或電子郵件地址。
- 以特定語言文法為基礎的字詞。
有 13 個不同的權杖化工具可供選擇。 這些權杖化工具包括:
- 傳統。 此權杖化工具會根據歐洲語言的文法來處理文字。
- 關鍵字。 此權杖化工具會將整個輸入作為單一權杖發出。 針對應一律編制索引為一個值的欄位,請使用此權杖化工具。
- 小寫。 此權杖化工具會將文字分割為非字母,然後將產生的權杖修改為全小寫。
- microsoft_language_tokenizer。 此權杖化工具會根據您指定的語言文法來分割文字。
- pattern。 此權杖化工具會分割在符合所指定規則運算式的文字上。
- whitespace。 此權杖化工具會將文字分割在具有空白字元的位置。
注意
如需權杖化工具選的完整清單,請參閱下方深入了解一節內的將自訂分析器新增至 Azure AI 搜尋索引中的字串欄位。
權杖篩選
在權杖化工具將傳入文字分割成權杖之後,您可能會想要新增一些額外的處理,例如移除停用字詞或修剪標點符號。 您可以藉由指定權杖篩選來執行此處理。 有四十一種不同權杖篩選器可供使用,包括:
- 特定語言的篩選,例如 arabic_normalization。 這些篩選會套用特定語言的文法規則,以確保移除字詞的形式,並以根本形式取代。
- 單引號。 此篩選會從權杖中移除任何單引號,以及單引號之後的任何字元。
- 傳統。 此篩選會從縮寫中移除英文所有格和句號。
- 保留。 此篩選會從您指定的清單中,移除不包含一個或多個字詞的任意權杖。
- 長度。 此篩選會移除任何超過指定最小值或小於指定最大值的權杖。
- 修剪。 此篩選會從權杖中移除任何前置和後置空白字元。
注意
如需權杖篩選的完整清單,請參閱下方深入了解一節內的將自訂分析器新增至 Azure AI 搜尋索引中的字串欄位。
建立自訂分析器
您可以在定義索引時,藉由指定自訂分析器來建立自訂分析器。 您必須使用 JSON 程式碼來執行此動作 - 您無法在 Azure 入口網站中指定自訂索引。 請在設計階段使用索引的 analyzers
區段。 您只能包含一個權杖化工具,但可以包含一個或多個字元篩選和一個或多個權杖篩選。 請為分析器使用唯一名稱,並將 @odata.type
屬性設定為 Microsoft.Azure.Search.CustomAnalyzer
。
在此範例中,字元篩選會移除 HTML 格式、權杖化工具會根據冰島文的文法分割文字,而權杖篩選會移除單引號:
"analyzers":(optional)[
{
"name":"ContosoAnalyzer",
"@odata.type":"#Microsoft.Azure.Search.CustomAnalyzer",
"charFilters":[
"WebContentRemover"
],
"tokenizer":"IcelandicTokenizer",
"tokenFilters":[
"ApostropheFilter"
]
}
],
"charFilters":(optional)[
{
"name":"WebContentRemover",
"@odata.type":"#html_strip"
}
],
"tokenizers":(optional)[
{
"name":"IcelandicTokenizer",
"@odata.type":"#microsoft_language_tokenizer",
"language":"icelandic",
"isSearchTokenizer":false,
}
],
"tokenFilters":(optional)[
{
"name":"ApostropheFilter",
"@odata.type":"#apostrophe"
}
]
測試自訂分析器
將自訂分析器定義為索引的一部分之後,您就可以使用 REST API 的分析文字函數來提交測試文字,並確保分析器正確傳回權杖。 請使用任何 REST 測試工具來制定這些要求,例如熱門的 Postman 應用程式。
您的測試 REST 要求看起來應該像這樣:
POST https://<search service name>.search.windows.net/indexes/<index name>/analyze?api-version=<api-version>
Content-Type: application/json
api-key: <api key>
在此要求中:
- 以 AI 搜尋資源的名稱取代
<search service name>
。 - 將
<index name>
取代為索引的名稱,其包含自訂分析器。 - 將
<api-version>
取代為 REST API 的版本號碼。 - 將
<api-key>
取代為 AI 搜尋資源的存取金鑰。 您可以從 Azure 入口網站取得此金鑰。
您的要求也必須包含 JSON 本文,如下所示:
{
"text": "Test text to analyze.",
"analyzer": "<analyzer name>"
}
將 <analyzer name>
取代為您定義自訂分析器時所指定的名稱。 請務必以許多不同的 text
值進行測試,直到您確定自訂分析器正常運作為止。
針對欄位使用自訂分析器
定義並測試自訂分析器之後,您就可以設定索引來加以使用。 您可以為索引中的每個欄位指定分析器。
當您想要針對索引編制和搜尋使用相同的分析器時,可以使用 analyzer
欄位:
"fields": [
{
"name": "IcelandicDescription",
"type": "Edm.String",
"retrievable": true,
"searchable": true,
"analyzer": "ContosoAnalyzer",
"indexAnalyzer": null,
"searchAnalyzer": null
},
您也可以在編制欄位索引和搜尋欄位時,使用不同的分析器。 當您將欄位編制索引及分析查詢時,如果您需要一組不同的處理步驟,請使用此組態:
"fields": [
{
"name": "IcelandicDescription",
"type": "Edm.String",
"retrievable": true,
"searchable": true,
"analyzer": null,
"indexAnalyzer": "ContosoIndexAnalyzer",
"searchAnalyzer": "ContosoSearchAnalyzer"
},