设计架构的结构以获得最优查询解释

Cloud Search 的 查询解释 功能可自动将用户查询中的运算符和过滤条件转换为基于运算符的结构化查询。此功能使用架构中定义的运算符和已编入索引的文档来推断查询 intent。这样,用户就可以使用最少的关键字进行搜索,并获得精确的结果。

结果的呈现方式取决于 置信度。当查询字符串持续出现在特定架构字段(例如 actors 字段中的“Tom Hanks”)中时,置信度会提高。当字符串出现在一般散文中时,置信度会降低。如果置信度较高,系统只会显示解释结果;如果置信度较低,系统会将解释结果与标准关键字结果混合显示。

查询解释示例

假设有一个包含电影信息的数据库。图 1 显示了一个示例搜索查询及其解释。

查询解释概览
图 1.查询解释

在此示例中,查询解释功能:

  • 根据架构确定顶级对象为 objecttype:movies
  • 扫描文档以确定“action”出现的位置。如果它主要出现在 genre 字段中,则可以确信它是该字段的属性值。

得出的解释如下: actor:"tom hanks" genre:action objecttype:movies

查询解释功能会自动为所有用户启用,但您可以按照以下部分中的说明设计架构的结构,以优化此功能。

设计架构的结构以支持查询解释功能

优化架构可确保您充分利用查询解释功能。

启用显示名称解释

查询解释功能使用 objectDefinitionspropertyDefinitions 来解释查询。使用 displayLabel 为属性创建直观的显示名称,使用 objectDisplayLabel 为对象创建直观的显示名称,并使用operatorName为运算符创建直观的显示名称。

此示例显示了“movie”对象的直观显示名称:

{
  "objectDefinitions": [{
    "name": "movie",
    "options": {
      "displayOptions": { "objectDisplayLabel": "Films" }
    },
    "propertyDefinitions": [{
      "name": "genre",
      "isReturnable": true,
      "textPropertyOptions": {
        "operatorOptions": { "operatorName": "genre" }
      },
      "displayOptions": { "displayLabel": "Category" }
    }]
  }]
}

这些显示名称支持以下解释:

  • “action movies”-> genre:action object:movies
  • “movies with genre action or thriller”-> objecttype:movies genre:(action OR thriller)
  • “comedy category movies”-> genre:comedy objecttype:movies

启用日期、数值和排序解释

IntegerOperatorOptions 中为所有日期和数值属性定义 lessThanOperatorNamegreaterThanOperatorName。如需启用排序,请设置 isSortable

此示例启用了这些选项:

{
  "objectDefinitions": [{
    "propertyDefinitions": [
      {
        "name": "runtime",
        "isSortable": true,
        "integerPropertyOptions": {
          "operatorOptions": {
            "operatorName": "runtime",
            "lessThanOperatorName": "runtimelessthan",
            "greaterThanOperatorName": "runtimegreaterthan"
          }
        }
      },
      {
        "name": "releasedate",
        "isSortable": true,
        "datePropertyOptions": {
          "operatorOptions": {
            "operatorName": "releasedate",
            "lessThanOperatorName": "releasedbefore",
            "greaterThanOperatorName": "releasedafter"
          }
        }
      }
    ]
  }]
}

这些设置支持以下解释:

  • “movies released this year”-> objecttype:movies releasedafter:2019-1-1 releasedbefore:2019-12-31
  • “movies with runtime less than 90”-> objecttype:movies runtimelessthan:90

启用预留的运算符解释

使用内置运算符,例如 typebeforeafterobjecttype

  1. ItemMetadata 中填充 updateTime 以使用 beforeafter
  2. ItemMetadata 中填充 mimeType 以进行自动检测。例如,“action videos”会列出具有视频 MIME 类型的文档。

查询解释限制

  • 仅适用于以下数据源 ACL:
    • 网域公开。
    • 数据源公开。
    • 大多数文档共享相同的继承 ACL。
  • 共享的运算符名称(例如,priorityseverity 都使用 0-3)会降低置信度。
  • 默认情况下,解释功能对字段值使用小写字母,除非您使用 exactMatchWithOperator
  • 不支持 source 运算符。
  • 系统不会解释组合运算符和自由文本术语(例如“p0 cases severity:s0”)。
  • 结果始终与按相关性排名的结果混合显示。