共用方式為


Azure AI 搜尋服務的同義字

在搜尋服務上,同義字對應會關聯對等字詞,並擴展查詢範圍,無需使用者實際提供該字詞。 舉例來說,假設「dog」、「canine」和「puppy」是對應的同義字,查詢「canine」時將會對應到包含「dog」的文件。 如果您的內容包含技術行話、俚語或晦澀的術語,則可以為不同語言 (例如英文版和法文版) 或語彙建立多個同義字對應。

以下是有關同義字對應的一些重點:

  • 同義字對應是最上層資源,建立一次後即可供許多索引使用。
  • 同義字對應會套用至字串欄位。
  • 您可以隨時建立並指派同義字對應,無需中斷編製索引或查詢。
  • 您的服務層級會設定您可以建立的同義字對應數量上限。
  • 搜尋服務可以有多個同義字對應,但在索引內,欄位定義只能有一個同義字對應指派。

建立同義字對應

同義字對應是由名稱、格式和規則所組成,上述項目可作為同義字對應輸入。 唯一支援的格式是 solr,而 solr 格式則會決定規則建構。

若要建立同義字對應,請以程式設計方式執行。 入口網站不支援同義字對應定義。

使用建立同義字對應 (REST API) 來建立同義字對應。

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

明確對應

明確對應的規則會以箭號 => 表示。 當指定時,與 => 左側相符的搜尋查詢字詞序列,會由查詢時右側的替代字詞所取代。

在明確的案例中,系統會將 WashingtonWash.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.StringCollection(Edm.String)
  • 欄位必須具有 "searchable":true
  • 欄位只能有一個同義字對應

如果同義字對應存在於搜尋服務中,則會在下一個查詢中使用,無需重新編製索引或重建。

使用建立或更新索引 (REST API) 來修改欄位定義。

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>*

如果您在開發 (非生產) 環境中有現有的索引,可以使用小型的字典進行試驗,看看增加同義字能如何改變搜尋體驗,包含對於評分檔案、點閱數醒目提示以及搜尋建議的影響。

下一步