提高搜索质量

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

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

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

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

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

影响话题性分数

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

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

如需影响文本属性的话题性分数,请在架构中定义文本属性的 RetrievalImportance。与 RetrievalImportance 较低的属性匹配的属性相比,RetrievalImportance 较高的属性获得更高的分数。

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

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

大多数用户会使用 bug 名称查询此数据源,因此您需要在架构中将名称上的 RetrievalImportance 设置为 HIGHEST

相反,大多数用户可能不会使用 bug 的说明来查询此数据源,因此请将说明中的 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)来计算新鲜度。

在我们之前的软件 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)。在这种情况下,与优先级为 LOW 的 bug 相比,将 OrderedRanking 设置为 DESCENDING 可提高优先级为 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 中自定义搜索体验

通过个性化影响排名

“个性化”是指基于访问结果的个人用户呈现个性化的搜索结果。您可以根据以下条件,通过划分项的优先级来影响排名:

  • 项所有权
  • 项交互情况
  • 用户点击
  • 项语言

以下三节介绍如何基于这些条件来影响搜索质量。

基于项所有权影响排名

“项所有权”是指向执行搜索查询的用户所拥有的项提供更高的排名。每个项目都有一个 ItemAclowners 字段。如果执行查询的用户是项的所有者,则在默认情况下,该项会获得更高的排名。您可以在搜索应用中关闭个性化功能。

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

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

系统会自动获取云端硬盘和 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"
      ],
    }
  ],
  ...
}

由于已编入索引的项和搜索请求都包含“Department=Engineering”和“Location=USA”的属性,因此已编入索引的项(员工福利文档)在搜索结果中的位置会更靠前。

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

{
  ...
  "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 架构,请参阅定义同义词