提高搜索质量

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

“排名”是指项的排序,而“召回率”是指检索到的相关项的数量。“项”(也称为文档)是 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>)和格式设置(例如字体大小和粗体)将用于确定各种字词的重要性。如果 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:与具有较大值的项相比,整数或枚举属性值较小的项会获得更高的排名。

例如,假设 Bug 跟踪系统中的每个 Bug 都具有一个枚举属性,用于将 Bug 的优先级存储为 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 利用根据公共 Web 内容推断出的同义词来扩展查询字词。您还可以定义自定义同义词,用以捕获组织专用术语,例如组织内使用的常见首字母缩写词或行业专用术语。

自定义同义词可以在数据源中定义,也可以作为单独的数据源定义。无论同义词是在何处定义的,自定义同义词都适用于网域中的所有搜索应用。如需了解如何定义自定义同义词,请参阅定义同义词

使用拼写影响搜索结果

Cloud Search 根据使用 Google 搜索公开数据所构建的模型提供拼写建议。如果 Cloud Search 在查询的上下文中检测到拼写错误,则会在 SpellResult 中返回建议的查询。建议的拼写可以作为建议内容向用户显示。例如,用户可能会使用拼写错误的查询字词“employe”,而系统可能会提供如下建议:“您是不是要找:employee”。

Cloud Search 还使用更正的拼写作为同义词,帮助检索由于拼写错误而可能被遗漏的文档。

通过搜索应用设置影响排名

Google Cloud Search 简介中所述,搜索应用是一组设置,当与搜索界面关联时,这些设置会提供有关搜索的上下文信息。借助以下配置,您可以通过搜索应用来影响排名:

  • 评分配置
  • 源配置

以下两节介绍这些配置如何有助于影响排名。

调整评分配置

对于每个搜索应用,您可以指定一个 ScoringConfig,用于在排名时控制某些信号的应用。目前,您可以停用新鲜度个性化

如果停用新鲜度,则搜索应用中所列全部数据源的新鲜度都将被停用,而无论数据源架构中指定的新鲜度选项如何。同样地,如果停用个性化,那么即使符合所有者交互情况等排名提升条件,项的排名也不会受到影响。

如需查看配置此设置的分步说明,请参阅打造自定义搜索体验

调整源配置

源配置可用于指定搜索应用中的数据源级别设置。支持以下设置:

  • 源重要性
  • 数量上限

设置源重要性

“源重要性”是指搜索应用中数据源的相对重要性。您可以在 SourceScoringConfig 内的 SourceImportance 字段中指定此设置。与源重要性为 DEFAULTLOW 的数据源中的项相比,源重要性为 HIGH 的数据源中的项将获得更高的排名。如果您认为用户更偏好来自某些数据源的结果,请使用此设置影响排名。

例如,假设您有一个包含外部和内部问题排查数据的产品支持门户。在这种情况下,您可能希望配置搜索应用,以对来自内部数据源的结果划分优先级。

如需查看配置此设置的分步说明,请参阅打造自定义搜索体验

设置数量上限

“数量上限”是指在搜索应用中可以从一个数据源返回的最大结果数。您可以使用 SourceCrowdingConfignumResults 字段控制此值。此值默认为 3,这意味着如果已经显示了来自同一个数据源的 3 个结果,Cloud Search 将开始显示来自其他数据源的结果。仅当所有数据源都达到数量上限或其他数据源不再提供更多结果时,系统才会重新考虑第一个数据源中的项。

此设置有助于确保搜索结果的多样性,并防止同一个数据源占据搜索结果页面。

如需查看配置此设置的分步说明,请参阅打造自定义搜索体验

通过个性化影响排名

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

  • 项所有权
  • 项交互情况
  • 项语言

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

基于项所有权影响排名

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

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

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

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

通过查询解释影响排名

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

基于项语言提升排名

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

  • RequestOptions 中指定的 languageCode
  • 自动检测到的搜索查询的语言。
  • 项的语言(ItemMetadata 中的 contentLanguage,或系统以该顺序自动检测到的语言)。

如果查询的语言与项的语言匹配,则不会应用语言降位。如果这些设置不匹配,则项将被降位。

推荐和可选搜索质量设置摘要

下表列出了所有推荐和可选的搜索质量设置。这些建议应该可以帮助您充分利用 Cloud Search 的排名模型。

设置位置推荐/可选详情
架构设置
ItemContent 字段ItemContent推荐创建或更新架构时,填充项的非结构化内容。此字段用于生成摘要。
RetrievalImportance 字段RetrievalImportance推荐创建或更新架构时,为重要性和话题性明显很高的文本属性设置此字段。
FreshnessOptionsFreshnessOptions可选创建或更新架构时,设置此字段可确保项不会因为数据不正确或发生数据丢失的情况而被降位。
索引设置
createTime/updateTimeItemMetadata推荐将项编入索引时填充。
owners 字段ItemAcl()推荐将项编入索引时填充。
自定义同义词_dictionaryEntry 架构推荐编入索引时在数据源级别定义,或作为单独的数据源定义。
quality 字段SearchQualityMetadata可选要提升基本质量(与其他语义相似的项相比),请在编入索引时设置质量。为数据源中的所有项设置此字段会使其无效。
项级别的交互数据interaction可选如果数据源记录并提供对用户交互情况的访问权限,则在编入索引时填充每一项的交互情况。
整数/枚举属性OrderedRanking可选如果项的顺序具有相关性,则在编入索引时指定整数和枚举属性的有序排名。
搜索应用设置
Personalization=falseScoringConfig 或使用 Cloud Search 管理界面推荐创建或更新搜索应用时。确保您提供了正确的所有者信息,如“通过个性化影响排名”中所述
SourceImportance 字段SourceCrowdingConfig可选如果偏好来自某些数据源的结果,则设置此字段。
numResults 字段SourceCrowdingConfig可选若要控制结果的多样性,请设置此字段。

后续步骤

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

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

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