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"
}

若要建立同義字對應,請以程序設計方式執行此動作(入口網站不支援同義字對應定義):

定義規則

對應規則遵守Apache Solr的開放原始碼同義字篩選規格,如本檔所述: SynonymFilter。 此 solr 格式支援兩種規則:

  • 等價(其中詞彙在查詢中是相等的替代專案)

  • 明確對應(其中字詞在查詢前對應至一個明確字詞)

每個規則都必須以新的行字元 (\n) 分隔。 您可以在免費服務中為每個同義字對應定義最多 5,000 個規則,而其他階層中每個對應最多可以定義 20,000 個規則。 每個規則最多可以有 20 個擴充專案(或規則中的專案)。 如需詳細資訊,請參閱 同義字限制

查詢剖析器會自動將任何大寫或混合大小寫字詞小寫,但如果您想要保留字串中的特殊字元,例如逗號或虛線,請在建立同義字對應時新增適當的逸出字元。

等價規則

對等詞彙的規則在相同規則內以逗號分隔。 在第一個範例中,上的 USA 查詢會展開為 USA OR "United States" OR OR "United States of America"。 請注意,如果您想要比對詞組,查詢本身必須是引弧括住的片語查詢。

在等價案例中,查詢會 dog 展開查詢,以同時包含 puppycanine

{
"format": "solr",
"synonyms": "
    USA, United States, United States of America\n
    dog, puppy, canine\n
    coffee, latte, cup of joe, java\n"
}

明確對應

明確對應的規則會以箭號 =>表示。 指定時,搜尋查詢的字詞序列會取代 => 為查詢時右側的替代專案。

在明確的情況下,或 WAWashingtonWash.查詢會重寫為 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>*

如果您在開發(非生產環境)環境中有現有的索引,請實驗小型字典,以瞭解新增同義字會如何變更搜尋體驗,包括對評分配置檔的影響、點擊醒目提示和建議。

下一步