Azure AI 搜尋中的同義字
在搜尋服務上,同義字對應是與對等詞彙建立關聯的全域資源,可擴充查詢的範圍,而不需要用戶實際提供字詞。 例如,假設 “dog”、“canine” 和 “puppy” 是對應的同義字,則 “canine” 的查詢將會比對包含 “dog” 的檔。
建立同義字
同義字對應是一種資產,可以建立一次並由許多索引使用。 服務 層級 會決定您可以建立的同義字對應數目,範圍從免費層和基本層的三個同義字對應,標準層最多 20 個。
如果您的內容包含技術術語、俚語或模糊術語,您可能會為不同的語言建立多個同義字對應,例如英文和法文版本,或語彙。 雖然您可以在搜尋服務中建立多個同義字對應,但在索引內,字段定義只能有一個同義字對應指派。
同義字對應是由做為同義字對應項目的名稱、格式和規則所組成。 唯一支援的格式是 solr
,而 solr
格式會決定規則建構。
POST /synonymmaps?api-version=2023-11-01
{
"name": "geo-synonyms",
"format": "solr",
"synonyms": "
USA, United States, United States of America\n
Washington, Wash., WA => WA\n"
}
若要建立同義字對應,請以程序設計方式執行此動作(入口網站不支援同義字對應定義):
- 建立同義字對應 (REST API) 。 此參考是最描述性的。
- SynonymMap 類別 (.NET) 和 建立同義字對應(Azure SDK 範例)
- SynonymMap 類別 (Python)
- SynonymMap 介面 (JavaScript)
- SynonymMap 類別 (Java)
定義規則
對應規則遵守Apache Solr的開放原始碼同義字篩選規格,如本檔所述: SynonymFilter。 此 solr
格式支援兩種規則:
等價(其中詞彙在查詢中是相等的替代專案)
明確對應(其中字詞在查詢前對應至一個明確字詞)
每個規則都必須以新的行字元 (\n
) 分隔。 您可以在免費服務中為每個同義字對應定義最多 5,000 個規則,而其他階層中每個對應最多可以定義 20,000 個規則。 每個規則最多可以有 20 個擴充專案(或規則中的專案)。 如需詳細資訊,請參閱 同義字限制。
查詢剖析器會自動將任何大寫或混合大小寫字詞小寫,但如果您想要保留字串中的特殊字元,例如逗號或虛線,請在建立同義字對應時新增適當的逸出字元。
等價規則
對等詞彙的規則在相同規則內以逗號分隔。 在第一個範例中,上的 USA
查詢會展開為 USA
OR "United States"
OR OR "United States of America"
。 請注意,如果您想要比對詞組,查詢本身必須是引弧括住的片語查詢。
在等價案例中,查詢會 dog
展開查詢,以同時包含 puppy
和 canine
。
{
"format": "solr",
"synonyms": "
USA, United States, United States of America\n
dog, puppy, canine\n
coffee, latte, cup of joe, java\n"
}
明確對應
明確對應的規則會以箭號 =>
表示。 指定時,搜尋查詢的字詞序列會取代 =>
為查詢時右側的替代專案。
在明確的情況下,或 WA
的Washington
Wash.
查詢會重寫為 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# 等其他語言的特殊字元,因此您可能需要將它重複逸出。 例如,針對上述同義字對應傳送至 REST API 的 JSON 看起來會像這樣:
{
"format":"solr",
"synonyms": "WA\\, USA, WA, Washington"
}
上傳和管理同義字對應
如先前所述,您可以建立或更新同義字對應,而不會中斷查詢和編製索引工作負載。 同義字對應是獨立物件(例如索引或數據源),只要沒有字段使用它,更新就不會造成索引編製或查詢失敗。 不過,當您將同義字對應新增至欄位定義時,如果您接著刪除同義字對應,任何包含有問題的欄位的查詢都會失敗,並出現 404 錯誤。
建立、更新和刪除同義字對應一律是整份文件作業,這表示您無法以累加方式更新或刪除同義字對應的各個部分。 即使更新單一規則也需要重載。
將同義字指派給欄位
上傳同義字對應之後,您可以在具有 Edm.String
的欄位上啟用同義字,或在 Collection(Edm.String)
具有 "searchable":true
的欄位上啟用同義字。 如所述,欄位定義只能使用一個同義字對應。
POST /indexes?api-version=2023-11-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>*
。
如果您在開發(非生產環境)環境中有現有的索引,請實驗小型字典,以瞭解新增同義字會如何變更搜尋體驗,包括對評分配置檔的影響、點擊醒目提示和建議。