提高搜索质量

“搜索质量”是指执行搜索查询的用户对于搜索结果的排名和召回率等质量体验。

“排名”是指项的排序,而“召回率”是指检索到的相关项的数量。“项”(也称为文档)是 Google Cloud Search 可以编入索引的任何数字内容。项的类型包括 Microsoft Office 文档、PDF 文件、数据库中的行、唯一网址等。项包含以下内容:

  • 结构化元数据
  • 可编入索引的内容
  • ACL

Cloud Search 使用多种信号来检索搜索查询结果,并对其进行排名;项由搜索查询所生成。您可以通过架构中的设置、项的内容和元数据(编制索引期间)和搜索应用来影响 Cloud Search 的信号。本文档旨在帮助您通过修改这些信号影响因素来提高搜索质量。

如需查看推荐和可选设置的摘要,请参阅推荐和可选搜索质量设置摘要

影响话题性分数

“话题性”是指搜索结果与原始查询字词的相关性。项的话题性根据以下标准而计算得出:

  • 每个查询字词的重要性。
  • 命中数(查询字词在项的内容或元数据中出现的次数)。
  • 查询字词及其变体与在 Cloud Search 中编入索引的项的匹配类型。

如需影响文本属性的话题性分数,请在架构中定义文本属性的 RetrievalImportance。与 RetrievalImportance 较高的媒体资源进行匹配时,会生成较高的分数;相比之下,与 RetrievalImportance 较低的媒体资源进行匹配时,则生成的分数会较低。

例如,假设您的一个数据源具有以下特征:

  • 数据源用于存储软件错误的历史记录。
  • 每个 Bug 都具有名称、描述和优先级。

大多数用户会使用错误的名称来查询此数据源,因此您应在架构中将名称的 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>)和格式设置(例如字体大小和粗体)将被用于确定各种字词的重要性。如果 ContentFormatTEXT,则 ItemContent 的检索重要性为 DEFAULT;如果是 HTML,则其检索重要性将根据 HTML 属性确定。

影响新鲜度

新鲜度用于衡量内容的修改时间,由 ItemMetadata 中的 createTimeupdateTime 属性决定。较早的内容会在搜索结果中降级。

您可以通过调整架构中 FreshnessOptionsfreshnessPropertyfreshnessDuration 来影响对象的新鲜度计算方式。

借助 freshnessProperty,您可以使用日期或时间戳属性(而不是默认的 updateTime)来计算新鲜度。

在我们之前的软件 Bug 跟踪系统示例中,截止日期可以用作 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 来提升人力资源员工所撰写文档的排名(相对于其他员工撰写的文档)。

以下架构示例包含 bug 跟踪系统中问题的 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(质量值为 0.5)和 Issue 1(如果未指定,则默认质量值为 0)。

使用字段类型影响排名

借助 Cloud Search,您可根据枚举或整数属性的值来影响排名。对于每个整数或枚举属性,可以指定 OrderedRanking。此设置具有以下值:

  • NO_ORDER(默认值):该属性不影响排名。
  • ASCENDING:与具有较小值的项相比,此整数或枚举属性值较大的项会获得更高的排名。
  • DESCENDING:与具有较大值的项相比,整数或枚举属性值较小的项会获得更高的排名。

例如,假设错误跟踪系统中的每个错误都具有一个枚举属性,用于将错误的优先级存储为 HIGH (1)、MEDIUM (2) 或 LOW (3)。在这种情况下,如果将 OrderedRanking 设置为 DESCENDING,则与优先级为 LOW 的 bug 相比,优先级为 HIGH 的 bug 会获得更高的排名。以下架构示例包含 bug 跟踪系统中问题的 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,
          }
        },

        ...
      ]
    }
  ]
}

Bug 跟踪系统还可以有一个称为 votes 的整数属性,用于收集用户对 Bug 的相对重要性的反馈。您可以使用 votes 属性来影响排名,只需将得票最多的 bug 设置为更高的重要性即可。在这种情况下,您可以为 votes 属性指定 OrderedRanking 作为 ASCENDING,从而确保得票最多的问题获得更高的排名。以下架构示例包含 bug 跟踪系统中问题的 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。如果执行查询的用户是项的所有者,则在默认情况下,该项会获得更高的排名。您可以在搜索应用中关闭个性化功能。

基于项的交互情况提升排名

“项的交互情况”是指向搜索查询用户进行过交互(查看、评论、编辑等)的项提供更高的排名。

系统会自动获取云端硬盘和 Gmail 等 Google Workspace 产品的项交互信号。对于其他产品,您可以提供项级别的交互数据,包括交互类型(查看和编辑)、交互的时间戳和主体(与项进行交互的用户)。请注意,近期进行过交互的项的排名会更靠前。

根据用户点击次数提升排名

Cloud Search 会收集当前搜索结果的点击次数,并利用这些信息来提升同一用户之前点击过的项的排名,从而改进日后的搜索排名。

通过查询解释影响排名

Cloud Search 的“查询解释”功能可自动解释用户查询中的运算符和过滤条件,并将这些元素转换为基于运算符的结构化查询。“查询解释”使用架构中定义的运算符并结合已编入索引的文档推断出用户查询的含义。此功能可让用户使用最少的关键字进行搜索,但仍然能够获得精确的结果。如需了解详情,请参阅构建架构以获得最佳查询解释

基于项语言提升排名

“语言”是指将语言与查询语言不匹配的项的排名降位。以下因素会影响项基于语言的排名:

  • 查询语言。自动检测到的搜索查询的语言,或 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"
      ],
    }
  ],
  ...
}

由于索引中的项和搜索请求都包含“部门=工程”和“地理位置=美国”属性,因此索引中的项(员工福利文档)在搜索结果中的排名会更靠前。

现在假设另一位用户(印度的一名工程师)在搜索界面中输入了“福利”这一搜索查询。以下是包含其位置和部门信息的搜索请求:

{
  ...
  "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可选如果数据源记录并提供对用户交互情况的访问权限,则在编入索引时填充每一项的交互情况。
整数/枚举属性OrderedRanking可选如果项的顺序具有相关性,则在编入索引时指定整数和枚举属性的有序排名。
搜索应用设置
Personalization=falseScoringConfig 或使用 Cloud Search 管理界面推荐创建或更新搜索应用时。确保您提供了正确的所有者信息,如“通过个性化影响排名”中所述
SourceImportance 字段SourceCrowdingConfig可选如果偏好来自某些数据源的结果,则设置此字段。
numResults 字段SourceCrowdingConfig可选若要控制结果的多样性,请设置此字段。

后续步骤

您可以执行以下几个后续步骤:

  1. 构建架构以获得最佳查询解释

  2. 了解如何利用 _dictionaryEntry 架构为公司常用的术语定义同义词。如需使用 _dictionaryEntry 架构,请参阅定义同义词