在 Azure AI 搜尋中新增同義字
在搜尋服務上,同義字對應會關聯對等字詞,並擴展查詢範圍,無需使用者實際提供該字詞。 例如,假設狗、犬類和小狗是對應的同義字,即包含狗的檔上的犬類相符查詢。 如果您的內容包含技術行話、俚語或晦澀的術語,則可以為不同語言 (例如英文版和法文版) 或語彙建立多個同義字對應。
以下是有關同義字對應的一些重點:
- 同義字對應是最上層資源,建立一次後即可供許多索引使用。
- 同義字對應會套用至字串欄位。
- 您可以隨時建立並指派同義字對應,無需中斷編製索引或查詢。
- 您的服務層級會設定您可以建立的同義字對應數量上限。
- 搜尋服務可以有多個同義字對應,但在索引內,欄位定義只能有一個同義字對應指派。
建立同義字對應
同義字對應是由名稱、格式和規則所組成,上述項目可作為同義字對應輸入。 唯一支援的格式是 solr
,而 solr
格式會決定規則建構。
若要建立同義字對應,請以程式設計方式執行。 入口網站不支援同義字對應定義。
使用建立同義字對應 (REST API) 來建立同義字對應。
POST /synonymmaps?api-version=2024-07-01
{
"name": "geo-synonyms",
"format": "solr",
"synonyms": "
USA, United States, United States of America\n
Washington, Wash., WA => WA\n"
}
定義規則
對應規則遵守Apache Solr的開放原始碼同義字篩選規格,如本檔所述: SynonymGraphFilter。 solr
格式支援兩種規則:
對等性 (查詢中的詞彙相等且可替代)
明確對應 (其中的字詞已對應至一個明確字詞)
每個規則均使用新行字元 (\n
) 分隔。 在免費服務中,每個同義字對應最多可以定義 5,000 條規則,而其他階層的每個對應則最多可以定義 20,000 條規則。 每個規則最多可以有 20 個擴充,或規則中的專案。 如需詳細資訊,請參閱同義字限制。
查詢剖析器會將任何大寫或混合大小寫的字詞轉換成小寫。 若要在字串中保留特殊字元,例如逗號或虛線,請在建立同義字對應時新增適當的逸出字元。
對等性規則
對等詞彙的規則會在相同的規則內以逗號分隔。 在第一個範例中,美國查詢會擴充至美國或「美國」或「美國 美國」。請注意,如果您想要比對詞組,查詢本身必須是引弧括住的片語查詢。
在等價的情況下,狗的查詢會展開查詢,以包含小狗和犬。
{
"format": "solr",
"synonyms": "
USA, United States, United States of America\n
dog, puppy, canine\n
coffee, latte, cup of joe, java\n"
}
明確對應
明確對應的規則會以箭號 =>
表示。 當指定時,與 =>
左側相符的搜尋查詢字詞序列,會由查詢時右側的替代字詞所取代。
在明確的情況下,會將 Washington、Wash 或 WA 的查詢重寫為 WA,而查詢引擎只會在 WA 一詞上尋找相符專案。 明確對應僅適用於指定的方向,在此案例中不會將查詢 WA 重寫至 Washington 。
{
"format": "solr",
"synonyms": "
Washington, Wash., WA => WA\n
California, Calif., CA => CA\n"
}
逸出特殊字元
系統會在查詢處理期間分析同義字,就像其他查詢字詞一樣,這表示保留字元和特殊字元的規則會套用至同義字對應中的字詞。 需要逸出的字元清單會因簡單語法和完整語法而異:
若要保留預設分析器捨棄的字元,請替換保留這些字元的分析器。 選項包括 Microsoft 自然語言分析器 (其會保留有連字號的字組),或可處理更複雜模式的自訂分析器。 如需詳細資訊,請參閱部分字詞、模式和特殊字元。
下列範例示範如何使用反斜線逸出字元:
{
"format": "solr",
"synonyms": "WA\, USA, WA, Washington\n"
}
由於反斜線本身是 JSON 和 C# 等其他語言的特殊字元,因此您可能需要逸出兩次。 以下是使用 JSON 的範例:
{
"format":"solr",
"synonyms": "WA\\, USA, WA, Washington"
}
管理同義字對應
您可以在不中斷查詢和編製索引工作負載的情況下,更新同義字對應。 不過,當您將同義字對應新增至欄位之後,如果您刪除同義字對應,任何包含有問題的字段的查詢就會失敗,並出現 404 錯誤。
建立、更新和刪除同義字對應,一律是整份文件作業。 您無法以累加方式更新或刪除部分的同義字對應。 即便只是更新一個規則也需要重新載入。
將同義字指派給欄位
建立同義字對應之後,請將它指派給索引中的欄位。 若要指派同義字對應,請以程式設計方式執行。 入口網站不支援同義字對應欄位關聯。
- 欄位的類型必須是
Edm.String
或Collection(Edm.String)
- 欄位必須具有
"searchable":true
- 欄位只能有一個同義字對應
如果同義字對應存在於搜尋服務中,則會在下一個查詢中使用,無需重新編製索引或重建。
使用建立或更新索引 (REST API) 來修改欄位定義。
PUT /indexes?api-version=2024-07-01
{
"name":"hotels-sample-index",
"fields":[
{
"name":"description",
"type":"Edm.String",
"searchable":true,
"synonymMaps":[
"en-synonyms"
]
},
{
"name":"description_fr",
"type":"Edm.String",
"searchable":true,
"analyzer":"fr.microsoft",
"synonymMaps":[
"fr-synonyms"
]
}
]
}
查詢對等或對應的欄位
同義字欄位指派不會變更您撰寫查詢的方式。 在同義字對應指派之後,唯一的差異在於,如果同義字對應中有查詢字詞,搜尋引擎會根據規則來擴充或重寫字詞或片語。
查詢執行期間如何使用同義字
同義字是一種查詢擴充技術,可透過對等詞彙補充索引的內容,但僅適用於具有同義字指派的欄位。 如果欄位範圍查詢排除已啟用同義字的欄位,您就不會看到同義字對應中的相符項目。
針對已啟用同義字的欄位,同義字受限於與相關聯欄位相同的文字分析。 例如,如果系統使用標準 Lucene 分析器來分析欄位,同義字字詞也會在查詢時受限於標準 Lucene 分析器。 如果您想要在同義字字詞中保留標點符號,例如句點或虛線,請在欄位上套用內容保留分析器。
在內部,同義字功能會使用 OR 運算元,以同義字重寫原始查詢。 基於這個原因,點閱數醒目提示與評分檔案,會將原始詞彙與同義字視為對等。
同義字僅適用於自由格式的文字查詢,且不支援篩選、Facet、自動完成或建議。 自動完成和建議僅根據原始字詞提供,同義字比對結果不會出現在回應中。
如果您在開發 (非生產) 環境中有現有的索引,可以使用小型的字典進行試驗,看看增加同義字能如何改變搜尋體驗,包含對於評分檔案、點閱數醒目提示以及搜尋建議的影響。
通配符搜尋
同義字擴充不適用於萬用字元搜尋字詞;也不會擴充前置詞、模糊與 RegEx 字詞。
如果您需要執行適用同義字展開和萬用字元、regex 或模糊搜尋的單一查詢,您可以使用 OR 語法結合查詢。 例如,若要針對簡單查詢語法結合同義字與萬用字元,詞彙可以是 <query> | <query>*
。