提升搜尋品質

搜尋品質是指搜尋結果的品質,包括使用者在搜尋查詢時感知到的排名和回憶。

「排名」是指項目的排序,而「回憶率」則是指擷取的相關項目數量。「項目」 (也稱為文件) 是指 Google Cloud Search 可編入索引的任何數位內容。項目類型包括 Microsoft Office 文件、PDF 檔案、資料庫中的資料列、不重複的網址等等。項目包含以下元素:

  • 結構化中繼資料
  • 可建立索引的內容
  • 存取控制清單 (ACL)

Cloud Search 會使用各種信號擷取搜尋查詢結果,並為這些搜尋查詢產生的項目進行排名。您可以透過結構定義中的設定、項目的內容和中繼資料 (在索引期間),以及搜尋應用程式,影響 Cloud Search 的信號。本文件的目標,是協助您透過修改這些信號影響因子來改善搜尋品質。

如需建議和選用設定的摘要,請參閱「建議和選用搜尋品質設定的摘要」。

影響主題相關性分數

主題性是指搜尋結果與原始查詢字詞的關聯性。系統會根據下列條件計算項目的相關性:

  • 每個查詢字詞的重要性。
  • 命中次數 (查詢字詞出現在項目內容或中繼資料的次數)。
  • 與 Cloud Search 中已編入索引的項目相符的查詢字詞和變體類型。

如要影響文字屬性的主題相關度分數,請在結構定義中的文字屬性上定義 RetrievalImportance。與RetrievalImportance 較低的房源相比,RetrievalImportance 較高的房源會產生較高的分數。

舉例來說,假設您有以下特性的資料來源:

  • 這個資料來源用於儲存軟體錯誤的記錄。
  • 每個錯誤都有名稱、說明和優先順序。

大多數使用者會使用錯誤名稱查詢這個資料來源,因此您可以在結構定義中將名稱的 RetrievalImportance 設為 HIGHEST

相反地,大多數使用者可能不會使用錯誤說明來查詢這個資料來源,因此請將說明中的 RetrievalImportance 設為 DEFAULT。以下是包含 RetrievalImportance 設定的範例結構定義。

{
  "objectDefinitions": [
    {
      "name": "issues",
      "propertyDefinitions": [
        {
          "name": "summary",
          "textPropertyOptions": {
            "retrievalImportance": {
              "importance": HIGHEST
              }
            }
          },
        {
          "name": "description",
          "textPropertyOptions": {
            "retrievalImportance": {
              "importance": DEFAULT
              }
            }
          },
        {
          "name": "label",
            "isRepeatable": true,
          "textPropertyOptions": {
            "retrievalImportance": {
              "importance": DEFAULT
              }
            }
          },
        {
          "name": "comments",
          "textPropertyOptions": {
            "retrievalImportance": {
              "importance": DEFAULT
              }
            }
          },
        {
          "name": "project",
          "textPropertyOptions": {
            "retrievalImportance": {
              "importance": HIGH
              }
            }
          },
        {
          "name": "duedate",
          "datePropertyOptions": {
          }
        },
        ...
      ]
    }
  ]
}

在 HTML 文件中,<title><h1> 等標記,以及字型大小和加粗等格式設定,可用來決定各種字詞的重要性。如果 ContentFormatTEXTItemContent 就具有 DEFAULT 擷取重要性,如果是 HTML,則擷取重要性會根據 HTML 屬性決定。

影響新鮮度

即時性是指項目最近修改的時間,由 ItemMetadata 中的 createTimeupdateTime 屬性決定。較舊的項目會在搜尋結果中降級。

您可以調整結構定義中 FreshnessOptionsfreshnessPropertyfreshnessDuration,影響物件的新鮮度計算方式。

freshnessProperty 可讓您使用日期或時間戳記屬性來計算新鮮度,而非預設的 updateTime

在先前的軟體錯誤追蹤系統範例中,截止日期可做為 freshnessProperty 使用,讓截止日期最接近目前日期的項目被視為「較新」,並獲得排名提升。以下是包含 freshnessProperty 設定的範例結構定義:

{
  "objectDefinitions": [
    {
      "name": "issues",
      "options": {
        "freshnessOptions": {
          "freshnessProperty": "duedate"
        }
      },
      "propertyDefinitions": [
        {
          "name": "summary",
          "textPropertyOptions": {
            "retrievalImportance": {
              "importance": HIGHEST
            }
          }
        },
        {
          "name": "duedate",
          "datePropertyOptions": {
          }
        },
        ...
      ]
    }
  ]
}

使用 freshnessDuration 判斷項目何時會被視為過時。舉例來說,您可能有未定期編入索引的資料來源,或是不希望新鮮度影響排名的資料來源。您可以為 freshnessDuration 指定較高的值,達成這個目標。

假設您有一個含有員工個人資料資訊的資料來源,在這種情況下,您可能會希望 freshnessDuration 的值偏高,因為員工資訊的變更通常與員工排名無關。以下是包含 freshnessDuration 設定的範例結構定義:

{
  "objectDefinitions": [
    {
      "name": "people",
      "options": {
        "freshnessOptions": {
          "freshnessDuration": "315360000s", # 100 years
        }
      },
    }
  ]
}

如果資料來源的內容快速變動 (例如含有新聞文章的資料來源),您也可以將 freshnessDuration 設為非常小的值。在這種情況下,最近建立或修改的文件最相關。以下是包含 freshnessDuration 設定的資料來源範例結構定義,適用於快速變更的內容:

{
  "objectDefinitions": [
    {
      "name": "news",
      "options": {
        "freshnessOptions": {
          "freshnessDuration": "259200s", # 3 days
        }
      },
    }
  ]
}

影響品質

品質是衡量項目準確度和實用性的指標。資料來源可包含多個語意相似的文件,每個文件的品質等級也不同。您可以使用 SearchQualityMetadata 指定介於 0 和 1 之間的品質值。相較於較低值的項目,較高值的項目會獲得排名提升。只有在需要影響或提升項目品質 (而非提供給 Cloud Search 的資訊) 時,才使用這項設定。

舉例來說,假設您有一份包含員工福利文件的資料來源,您可以使用 SearchQualityMetadata,讓人力資源部門員工撰寫的文件排名高於其他員工撰寫的文件。

以下是範例結構定義,其中包含錯誤追蹤系統中問題的 SearchQualityMetadata 設定:

{
  "name": "datasources/.../items/issue1",
  "acl": {
    ...
  },
  "metadata": {
    "title": "Issue 1"
    "objectType": "issues"
  },
  ...
}

{
  "name": "datasources/.../items/issue2",
  "acl": {
    ...
  },
  "metadata": {
    "title": "Issue 2"
    "objectType": "issues"
    "searchQualityMetadata": {
      "quality": 0.5
    }
  },
  ...
}

{
  "name": "datasources/.../items/issue3",
  "acl": {
    ...
  },
  "metadata": {
    "title": "Issue 3"
    "objectType": "issues"
    "searchQualityMetadata": {
      "quality": 1
    }
  },
  ...
}

根據這個結構定義,當使用者使用搜尋字詞「issue」進行搜尋時,結構定義中的 Issue 3 (品質為 1) 會比 Issue 2 (品質為 .5) 和 Issue 1 (如果未指定,預設品質為 0) 排名更高。

使用欄位類型影響

Cloud Search 可讓您根據列舉或整數屬性的值影響排名。每個整數或列舉屬性都可以指定 OrderedRanking。這項設定的值如下:

  • NO_ORDER (預設):屬性不會影響排名。
  • ASCENDING:與值較低的項目相比,值較高的項目會獲得排名提升。
  • DESCENDING:整數或列舉屬性值較低的項目,會比值較高的項目獲得更高的排名。

舉例來說,假設錯誤追蹤系統中的每個錯誤都有一個列舉屬性,用於儲存錯誤的優先順序,例如 HIGH (1)、MEDIUM (2) 或 LOW (3)。在這種情況下,設定 OrderedRankingDESCENDING 可讓 HIGH 優先錯誤的排名高於 LOW 優先錯誤。以下是範例結構定義,其中包含錯誤追蹤系統中問題的 OrderedRanking 設定:

{
  "objectDefinitions": [
    {
      "name": "issues",
      "options": {
        "freshnessOptions": {
          "freshnessProperty": "duedate",
        }
      },
      "propertyDefinitions": [
        {
          "name": "summary",
          "textPropertyOptions": {
            "retrievalImportance": {
              "importance": HIGHEST
            }
          }
        },
        {
          "name": "duedate",
          "datePropertyOptions": {
          }
        },
        {
          "name": "priority",
          "enumPropertyOptions": {
            "possibleValues": [
              {
                "stringValue": "HIGH",
                "integerValue": 1
              },
              {
                "stringValue": "MEDIUM",
                "integerValue": 2
              },
              {
                "stringValue": "LOW",
                "integerValue": 3
              }
            ],
            "orderedRanking": DESCENDING,
          }
        },

        ...
      ]
    }
  ]
}

錯誤追蹤系統也可以有一個名為 votes 的整數屬性,用於收集使用者對錯誤相對重要性的意見回饋。您可以使用 votes 屬性,為獲得最多票數的錯誤提供較高的優先順序,藉此影響排名。在這種情況下,您可以將 OrderedRanking 指定為 votes 資源的 ASCENDING,這樣最多人投票的問題就能獲得排名提升。以下是包含錯誤追蹤系統中問題 OrderedRanking 設定的範例結構定義:

{
  "objectDefinitions": [
    {
      "name": "issues",
      "propertyDefinitions": [
        {
          "name": "summary",
          "textPropertyOptions": {
            "retrievalImportance": {
              "importance": HIGHEST
            }
          }
        },
        {
          "name": "description",
          "textPropertyOptions": {
            "retrievalImportance": {
              "importance": DEFAULT
            }
          }
        },
        {
          "name": "votes",
          "integerPropertyOptions": {
            "orderedRanking": ASCENDING,
            "minimumValue": 0,
            "maximumValue": 1000,
          }
        },

        ...
      ]
    }
  ]
}

透過查詢擴充功能影響排名

「查詢擴充」是指使用同義詞和拼字,擴充查詢中的字詞,以便擷取更精確的結果。

使用同義字影響搜尋結果

Cloud Search 會利用從公開網站內容推斷出的同義字,擴充搜尋字詞。您也可以定義自訂同義詞,用來擷取機構專屬的術語,例如機構內常用的縮寫字詞或產業專屬術語。

您可以在資料來源中定義自訂同義字,也可以將其設為獨立的資料來源。根據預設,同義字會套用至所有搜尋應用程式中的所有資料來源。不過,您可以依資料來源和搜尋應用程式將同義字分組。如要瞭解如何定義自訂同義字,包括依搜尋應用程式分組,請參閱「定義同義字」。

使用拼字來影響搜尋結果

Cloud Search 會根據使用公開 Google 搜尋資料建構的模型,提供拼字建議。如果 Cloud Search 在查詢內容中偵測到拼寫錯誤,就會在 SpellResult 中傳回建議的查詢。系統可將建議的拼寫方式顯示給使用者。舉例來說,使用者可能會拼錯查詢字詞「employe」,並收到「你是指 employee 嗎?」的建議。

Cloud Search 也會使用拼字修正內容做為同義詞,協助找出可能因拼字錯誤而遺漏的文件。

透過搜尋應用程式設定影響排名

Google Cloud Search 簡介所述,搜尋應用程式是一組設定,當與搜尋介面建立關聯時,就會提供搜尋的背景資訊。您可以透過下列設定,透過搜尋應用程式影響排名:

  • 評分設定
  • 來源設定

以下兩節說明這些設定如何影響排名。

調整評分設定

您可以為每個搜尋應用程式指定 ScoringConfig,用於控制在排名期間套用某些信號。目前,您可以停用新鮮度個人化功能。

如果新鮮度已停用,則搜尋應用程式中列出的所有資料來源都會停用新鮮度,無論資料來源的結構定義中指定的新鮮度選項為何。同樣地,如果停用個人化功能,擁有者加成和互動加成就不會影響排名。

如需逐步設定說明,請參閱「自訂 Cloud Search 搜尋體驗」。

調整來源設定

來源設定可讓您在搜尋應用程式中指定資料來源層級設定。系統支援下列設定:

  • 來源重要性
  • 聚集

設定來源重要性

來源重要性是指搜尋應用程式中資料來源的相對重要性。您可以在 SourceScoringConfig 內的 SourceImportance 欄位中指定這項設定。與 DEFAULTLOW 來源重要性相比,具有 HIGH 來源重要性的資料來源項目會獲得排名提升。當您認為使用者偏好特定資料來源的結果時,可以使用這項設定影響排名。

舉例來說,假設您有一個產品支援入口網站,其中包含外部和內部疑難排解資料。在這種情況下,您可能需要設定搜尋應用程式,將內部資料來源的結果設為優先。

如需逐步設定說明,請參閱「自訂 Cloud Search 搜尋體驗」。

設定擁擠度

擁擠是指搜尋應用程式中資料來源可傳回的結果數量上限。您可以使用 SourceCrowdingConfig 中的 numResults 欄位控制這個值。這個值的預設值為 3,也就是說,如果我們已顯示資料來源的 3 個結果,Cloud Search 就會開始顯示其他資料來源的結果。只有在所有資料來源都已達到擁擠上限,或其他資料來源沒有更多結果時,系統才會重新考慮第一個資料來源的項目。

這項設定有助於確保搜尋結果的多樣性,並避免單一資料來源主導搜尋結果網頁。

如需逐步設定說明,請參閱「自訂 Cloud Search 搜尋體驗」。

透過個人化功能影響排名

個人化是指根據存取結果的個別使用者,呈現個人化搜尋結果。您可以根據下列條件,為項目設定優先順序,進而影響排名:

  • 項目擁有權
  • 商品互動
  • 使用者點擊
  • 項目語言

以下三個部分將說明如何根據這些條件影響搜尋品質。

以商品擁有權為依據的影響力排名

項目擁有權是指為執行搜尋查詢的使用者所擁有的項目提供排名提升效果。每個項目都有一個含有 owners 欄位的 ItemAcl。如果執行查詢的使用者是項目的擁有者,則該項目會根據預設獲得排名提升。你可以在搜尋應用程式中關閉個人化功能。

根據商品互動提升排名

項目互動是指為搜尋查詢使用者互動過的項目 (查看、留言、編輯等) 提供排名提升。

系統會自動取得 Google Workspace 產品 (例如雲端硬碟和 Gmail) 的項目互動信號。針對其他產品,您可以提供項目層級的互動資料,包括互動類型 (檢視、編輯)、互動時間戳記,以及主要使用者 (與項目互動的使用者)。請注意,最近有互動的商品會獲得更高的排名提升。

根據使用者點擊次數提升排名

Cloud Search 會收集目前搜尋結果的點擊次數,並利用這些資料提升同一位使用者先前點選的項目排名,進而改善日後的搜尋結果。

透過查詢解讀影響排名

Cloud Search 的查詢解讀功能會自動解讀使用者查詢中的運算子和篩選器,並將這些元素轉換為結構化、以運算子為基礎的查詢。查詢解譯會使用結構定義中定義的運算子,搭配已編入索引的文件,推斷使用者查詢的意義。這項功能可讓使用者以最少的關鍵字搜尋,仍能取得精確的結果。如需更多資訊,請參閱「為最佳查詢解讀方式建立結構定義」。

根據商品語言提高排名

Language 是指針對語言不符合查詢語言的項目降級排名。以下因素會影響依語言排名的項目:

  • 查詢語言。搜尋查詢的自動偵測語言,或是 RequestOptions 中指定的 languageCode

    如果您建構自訂搜尋介面,請將 languageCode 設為使用者的介面語言或語言偏好設定 (例如網頁瀏覽器或搜尋介面頁面的語言)。自動偵測的查詢語言會優先於 languageCode,因此當使用者輸入的查詢語言與介面語言不同,也不會影響搜尋品質。

  • 商品語言。在建立索引時,在 ItemMetadata 中設定的 contentLanguage,或是由 Cloud Search 自動偵測的內容語言。

    如果文件的 contentLanguage 在索引時為空白,且 ItemContent 已填入資料,Cloud Search 會嘗試偵測 ItemContent 中使用的語言,並將其儲存在內部。系統不會將自動偵測到的語言新增至 contentLanguage 欄位。

如果查詢和項目的語言相符,系統就不會降級語言。如果這些設定不相符,該項目就會降級。如果 contentLanguage 為空白,且 Cloud Search 無法自動偵測語言,系統就不會套用語言降級。因此,如果 Cloud Search 無法偵測文件的語言,文件的排名就不會受到影響。

根據項目內容提升排名

你可以提高與搜尋查詢內容較相關項目的排名。背景資訊 (contextAttributes) 是一組命名屬性,可在建立索引期間和搜尋要求中指定,為特定搜尋查詢提供背景資訊。

舉例來說,假設某個項目 (例如員工福利文件) 與 LocationDepartment 的關聯性較高,例如城市 (San Francisco)、州 (California)、國家/地區 (USA) 和 Department (Engineering)。在這種情況下,您可以使用下列命名屬性為項目建立索引:

{
  ...
  "metadata": {
    "contextAttributes": [
      {
        name: "Location"
        values: [
          "San Francisco",
          "California",
          "USA"
        ],
      },
      {
        name: "Department"
        values: [
          "Engineering"
        ],
      }
    ],
  },
  ...
}

當使用者在搜尋介面中輸入「福利」的搜尋查詢時,您可以在搜尋要求中加入使用者的地點資訊和部門。舉例來說,以下是芝加哥工程師的搜尋要求,其中包含位置和部門資訊:

{
  ...
  "contextAttributes": [
    {
      name: "Location"
      values: [
        "Chicago",
        "Illinois",
        "USA"
      ],
    },
    {
      name: "Department"
      values: [
        "Engineering"
      ],
    }
  ],
  ...
}

由於已編入索引的項目和搜尋要求都包含「Department=Engineering」和「Location=USA」的屬性,因此已編入索引的項目 (員工福利文件) 會在搜尋結果中顯示在較前的位置。

假設另一位使用者 (印度的工程師) 在搜尋介面中輸入「benefits」的搜尋查詢,以下是包含他們所在地點和部門資訊的搜尋要求:

{
  ...
  "contextAttributes": [
    {
      name: "Location"
      values: [
        "Bengaluru",
        "Karnataka",
        "India"
      ],
    },
    {
      name: "Department"
      values: [
        "Engineering"
      ],
    }
  ],
  ...
}

由於已編入索引的項目和搜尋要求「只」包含「Department=Engineering」屬性,因此在搜尋結果中,已編入索引的項目只會比第一個搜尋查詢 (由美國伊利諾州芝加哥的工程師輸入的「benefits」) 略高一些。

以下列舉一些可用來提升排名的範例內容:

  • 位置:項目可能與特定位置 (例如建築物、城市、國家/地區或區域) 的使用者更相關。
  • 職務:某些項目可能與特定職務 (例如技術作家或工程師) 的使用者更相關。
  • 部門:項目可能與特定部門 (例如業務或行銷) 更相關。
  • 職位等級:項目可能與特定職位等級 (例如總監或執行長) 更相關。
  • 員工類型:某些項目可能與特定類型的員工更相關,例如兼職和全職員工。
  • 任職時間:項目可能與員工的任職時間相關,例如新進員工。

透過商品熱門程度影響排名

Cloud Search 會提升熱門項目的排名,也就是在近期搜尋查詢中獲得點擊的項目。

透過點擊提升影響排名

Cloud Search 會收集目前搜尋結果的點擊次數,並針對特定搜尋查詢推薦熱門項目,藉此改善日後搜尋的排名。

建議和選用搜尋品質設定摘要

下表列出所有建議和選用的搜尋品質設定。這些最佳化建議可協助您充分發揮 Cloud Search 的排名模型效益。

設定位置建議/選用詳細資料
結構定義設定
ItemContent 欄位ItemContent建議建立或更新結構定義時,請填入項目的非結構化內容。這個欄位用於產生摘要。
RetrievalImportance 欄位RetrievalImportance建議建立或更新結構定義時,請為明顯重要或熱門的文字屬性設定。
FreshnessOptionsFreshnessOptions選用建立或更新結構定義時,請設定確保項目不會因資料錯誤或缺少資料而降級。
索引設定
createTime/updateTimeItemMetadata建議在為項目建立索引時填入資料。
contentLanguageItemMetadata建議在索引項目時填入資料。如果沒有,Cloud Search 會嘗試偵測 ItemContent 中使用的語言。
owners 欄位ItemAcl()建議在索引項目時填入。
自訂同義詞_dictionaryEntry 結構定義建議在索引期間,在資料來源層級或做為個別資料來源定義。
quality 欄位SearchQualityMetadata選用如要提升品質,請在索引期間設定品質。如果為資料來源中的所有項目設定這個欄位,就會使其失效。
商品層級互動資料interaction選用如果資料來源記錄並提供使用者互動存取權,請在索引期間為每個項目填入互動資料。
整數/enum 屬性OrderedRanking選用如果項目順序相關,請在索引期間指定整數和列舉屬性的排序排名。
搜尋應用程式設定
Personalization=falseScoringConfig 或使用 CloudSearch 管理員 UI建議建立或更新搜尋應用程式時。請務必提供正確的擁有者資訊,詳情請參閱「透過個人化功能影響排名」
SourceImportance 欄位SourceCrowdingConfig選用如要偏重特定資料來源的結果,請設定這個欄位。
numResults 欄位SourceCrowdingConfig選用如要控制結果的多樣性,請設定這個欄位。

後續步驟

以下是您可以採取的後續步驟:

  1. 為結構定義提供最佳查詢解讀功能

  2. 瞭解如何利用 _dictionaryEntry 結構定義公司常用的同義詞。如要使用 _dictionaryEntry 結構定義,請參閱「定義同義詞」。