在搜尋結果中設定語意排名和傳回標題

重要

語意搜尋在 補充使用規定下處于公開預覽狀態。 它可透過Azure 入口網站、預覽 REST API 和 Beta SDK 取得。 這項功能可計費。 請參閱 可用性和定價

在本文中,您將瞭解如何在結果集上叫用語意排名演算法,將最語意相關的結果升階至堆疊頂端。 您也可以取得語意標題,其中醒目提示最相關的詞彙和片語,以及 語意答案

有兩個主要活動可執行:

  • 將語意設定新增至索引
  • 將參數新增至查詢要求

必要條件

  • 標準層 (S1、S2、S3) 或儲存體優化層 (L1、L2) 等區域中的搜尋服務:澳大利亞東部、美國東部、美國東部 2、美國中北部、美國中南部、美國西部 2、北歐、英國南部、西歐。

    如果您在其中一個區域中有現有的 S1 或更新服務,您可以啟用語意搜尋,而不需要建立新的服務。

  • 在您的 搜尋服務上啟用語意搜尋。

  • 具有 支援查詢語言之豐富內容的現有搜尋索引。 語意搜尋最適合參考或描述性的內容。

  • 如果您需要功能簡介,請檢閱 語意搜尋概觀

注意

標題和答案會逐字擷取自搜尋檔中的文字。 語意子系統會決定內容中哪些部分具有標題或答案的特性,但不會撰寫新的句子或片語。 基於這個理由,包含說明或定義的內容最適合用於語意搜尋。

1 - 選擇用戶端

您需要支援查詢要求預覽 API 的搜尋用戶端。 部分選項如下:

2 - 建立語意設定

重要

2021-04-30-Preview REST API、搜尋總管和部分 Beta SDK 版本都需要語意設定。 如果您使用 2020-06-30-preview REST API,請略過此步驟,並改用 「searchFields」 方法來設定欄位優先順序

語意設定會指定欄位在語意排名中的使用方式。 它提供哪些索引欄位對於語意排名、標題、醒目提示和答案而言最重要的基礎模型提示。

您會將語意設定新增至 索引定義。 下列索引標籤式區段提供 REST API、Azure 入口網站和 .NET SDK 預覽版的指示。

您可以隨時新增或更新語意設定,而不需重建索引。 發出查詢時,您會為每個查詢新增一個語意組態 (一個,) 指定要用於查詢的語意組態。

  1. 檢閱您需要指定的屬性。 語意設定具有名稱和至少一個下列每個屬性:

    • 標題欄位 - 標題 欄位應該是檔的精簡描述,最好是 25 個字底下的字串。 此欄位可以是檔標題、產品名稱,或搜尋索引中的專案。 如果您的搜尋索引中沒有標題,請將此欄位保留空白。
    • 內容欄位 - 內容 欄位應該包含自然語言格式的文字。 內容的常見範例包括檔本文、產品的描述或其他自由格式文字。
    • 關鍵字欄位 - 關鍵字 欄位應該是關鍵字清單,例如檔上的標籤,或描述性字詞,例如專案的類別。

    您只能指定一個標題欄位,但您可以視需要指定許多內容和關鍵字欄位。 對於內容和關鍵字欄位,請依優先順序列出欄位,因為優先順序較低的欄位可能會遭到截斷。

  2. 針對上述屬性,決定要指派哪些欄位。

    欄位必須是 支援的資料類型 ,而且應該包含字串。 如果您包含不正確欄位,則不會發生錯誤,但不會在語意排名中使用這些欄位。

    資料類型 hotels-sample-index 的範例
    Edm.String HotelName, Category, Description
    Edm.ComplexType Address.StreetNumber、Address.City、Address.StateProvince、Address.PostalCode
    Collection(Edm.String) 標籤 (以逗號分隔的字串清單)

    注意

    語意搜尋目前不支援集合 (Edm.ComplexType) 欄位的子欄位,且不會用於語意排名、標題或答案。

  1. 登入Azure 入口網站並流覽至已啟用語意搜尋的搜尋服務。

  2. 開啟索引。

  3. 選取 [語意設定 ],然後選取 [ 新增語意設定]。

    [ 新增語意設定 ] 頁面隨即開啟,其中包含選取標題欄位、內容欄位和關鍵字欄位的選項。 請務必依優先順序列出內容欄位和關鍵字欄位。

    選取 [確定] 儲存變更。

    顯示如何在Azure 入口網站中建立語意設定的螢幕擷取畫面。

提示

若要查看建立語意設定並用它來發出語意查詢的範例,請參閱 語意搜尋 Postman 範例

2b - 使用 searchFields 進列欄位優先順序設定

此步驟僅適用于使用 2020-06-30-Preview REST API 或不支援語意設定的 Beta SDK 的解決方案。 您不會透過語意設定在索引中設定欄位優先順序,而是使用查詢的 「searchFields」 參數,在查詢時間設定優先順序。

針對欄位優先順序使用 「searchFields」 是一項早期實作詳細資料,一旦語意搜尋結束公開預覽,就不支援。 如果您的應用程式需求允許,建議您使用語意設定。

POST https://[service name].search.windows.net/indexes/[index name]/docs/search?api-version=2020-06-30-Preview      
{    
    "search": " Where was Alan Turing born?",    
    "queryType": "semantic",  
    "searchFields": "title,url,body",  
    "queryLanguage": "en-us"  
}

欄位順序很重要,因為語意排名器會限制它可以處理的內容量,同時仍提供合理的回應時間。 清單開頭的欄位內容較可能包含;如果達到上限,可能會截斷結尾的內容。 如需詳細資訊,請參閱 語意排名期間的前置處理

  • 如果您只指定一個欄位,請選擇可找到語意查詢答案的描述性欄位,例如檔的主要內容。

  • 針對 searchFields 中的兩個或多個欄位:

    • 第一個欄位應該一律簡潔 (,例如標題或名稱) ,最好是 25 個字底下的字串。

    • 如果索引具有人類可讀取的 URL 欄位,例如 www.domain.com/name-of-the-document-and-other-details (而非電腦焦點,例如 www.domain.com/?id=23463&param=eis) ,請將它放在清單中 (,或者如果沒有簡潔的標題欄位) ,請將它放在清單中。

    • 請遵循上述欄位與其他描述性欄位,其中可以找到語意查詢的答案,例如檔的主要內容。

設定 「searchFields」 時,僅選擇下列 支援的資料類型欄位:

資料類型 hotels-sample-index 的範例
Edm.String HotelName, Category, Description
Edm.ComplexType Address.StreetNumber、Address.City、Address.StateProvince、Address.PostalCode
Collection(Edm.String) 標記 (以逗號分隔的字串清單)

如果您發生包含不正確欄位,則沒有任何錯誤,但這些欄位不會用於語意排名中。

3 - 避免略過相關性評分的功能

認知搜尋中的數個查詢功能不會經歷相關性評分,有些則完全略過全文搜尋引擎。 如果您的查詢邏輯包含下列功能,則不會取得結果的相關性分數或語意排名:

  • 篩選、模糊搜尋查詢和正則運算式會逐一查看未呼叫的文字,掃描內容中的逐字相符專案。 上述所有查詢表單的搜尋分數都是統一的 1.0,而且不會為語意排名提供有意義的輸入。

  • 排序 (orderBy 子句) 特定欄位也會覆寫搜尋分數和語意分數。 假設語意分數用來排序結果,包括明確的排序邏輯會導致傳回 HTTP 400 錯誤。

4 - 設定查詢

下一個步驟是將參數新增至查詢要求。 若要成功,您的查詢應該是全文檢索搜尋 (使用 「search」 參數來傳入字串) ,而且索引應該包含具有豐富語意內容的文字欄位。

搜尋總 管已更新為包含語意查詢的選項。 若要在入口網站中設定語意排名,請遵循下列步驟:

  1. 開啟Azure 入口網站並流覽至已啟用語意搜尋搜尋服務。

  2. 選取 [概觀] 頁面頂端的 [ 搜尋總 管]。

  3. 選擇具有 支援語言內容的索引。

  4. 在 [搜尋總管] 中,設定啟用語意查詢、語意設定和拼字更正的查詢選項。 您也可以將必要的查詢參數貼到查詢字串中。

顯示 [搜尋總管] 中查詢選項的螢幕擷取畫面。

5 - 評估回應

只有來自初始結果的前 50 個相符專案可以語意地排名。 如同所有查詢,回應是由標示為可擷取的所有欄位所組成,或只由 select 參數中列出的欄位所組成。 回應包含原始相關性分數,也可能包含計數或批次結果,視您制定要求的方式而定。

在語意搜尋中,回應有更多元素:新的語意排名相關性分數、純文字的選擇性標題,以及醒目提示,以及選擇性 答案。 如果您的結果不包含這些額外的元素,則您的查詢可能會設定錯誤。 在針對問題進行疑難排解的第一個步驟中,請檢查語意設定,以確保其同時在索引定義和查詢中指定。

在用戶端應用程式中,您可以建構搜尋頁面,以包含標題做為相符專案的描述,而不是特定欄位的整個內容。 當個別欄位對搜尋結果頁面太密集時,此方法很有用。

上述範例查詢的回應會傳回下列相符專案作為最上層選擇。 會傳回標題,因為已設定 「captions」 屬性,且具有純文字和醒目提示的版本。 從範例中省略答案,因為無法判斷這個特定查詢和主體的答案。

"@odata.count": 35,
"@search.answers": [],
"value": [
    {
        "@search.score": 1.8810667,
        "@search.rerankerScore": 1.1446577133610845,
        "@search.captions": [
            {
                "text": "Oceanside Resort. Luxury. New Luxury Hotel. Be the first to stay. Bay views from every room, location near the pier, rooftop pool, waterfront dining & more.",
                "highlights": "<strong>Oceanside Resort.</strong> Luxury. New Luxury Hotel. Be the first to stay.<strong> Bay</strong> views from every room, location near the pier, rooftop pool, waterfront dining & more."
            }
        ],
        "HotelName": "Oceanside Resort",
        "Description": "New Luxury Hotel. Be the first to stay. Bay views from every room, location near the pier, rooftop pool, waterfront dining & more.",
        "Category": "Luxury"
    },

下一步

回想一下,語意排名和回應是透過初始結果集所建置。 任何可改善初始結果品質的邏輯,都會繼續進行語意搜尋。 在下一個步驟中,檢閱參與初始結果的功能,包括影響字串標記化方式的分析器、可微調結果的評分設定檔,以及預設相關性演算法。