為結構定義最佳化查詢解讀功能

Cloud Search 查詢解讀功能會自動將使用者查詢中的運算子和篩選器,轉換為以運算子為基礎的結構化查詢。這項功能會使用結構定義中定義的運算子和已建立索引的文件,推斷查詢意圖。使用者只需輸入少量關鍵字,就能獲得精確的搜尋結果。

結果的呈現方式取決於信賴度。如果查詢字串持續出現在特定結構化資料欄位 (例如 「湯姆漢克斯」在 actors 欄位中)。如果字串出現在一般散文中,信賴度就會降低。如果信心指數較高,系統只會顯示解讀結果;如果信心指數較低,系統會將解讀結果與標準關鍵字結果混合顯示。

查詢解讀範例

假設資料庫包含電影資訊。圖 1 顯示範例搜尋查詢及其解讀結果。

查詢解讀總覽
圖 1. 查詢解讀

這個範例的查詢解讀結果如下:

  • 根據結構定義判斷頂層物件為 objecttype:movies
  • 掃描文件,找出「動作」發生的位置。如果主要出現在 genre 欄位中,則可提高該欄位為屬性值的信賴度。

解讀結果如下: actor:"tom hanks" genre:action objecttype:movies

系統會自動為所有使用者解讀查詢,但您可以按照下列章節所述的結構定義結構定義,進一步提升解讀效果。

為查詢解讀作業設定結構定義

最佳化結構定義可確保您能從查詢解讀功能獲益。

啟用顯示名稱解讀功能

查詢解讀功能會使用 objectDefinitionspropertyDefinitions 解讀查詢。使用 displayLabel 建立屬性的直覺式顯示名稱、objectDisplayLabel 建立物件的直覺式顯示名稱,以及 operatorName 建立運算子的直覺式顯示名稱。

以下範例顯示電影物件的直覺式顯示名稱:

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

這些顯示名稱可解讀為:

  • 「動作片」-> 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"
          }
        }
      }
    ]
  }]
}

這些設定可啟用以下解讀方式:

  • 「今年上映的電影」-> 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,即可自動偵測。舉例來說,「動作影片」會列出 MIME 類型為影片的文件。

查詢解讀限制

  • 僅適用於下列資料來源 ACL:
    • 網域公開。
    • 資料來源公開。
    • 大多數文件共用相同的繼承 ACL。
  • 共用運算子名稱 (例如 「priority」和「severity」都使用 0 到 3) 信心度較低。
  • 根據預設,除非使用 exactMatchWithOperator,否則解譯會將欄位值設為小寫。
  • 系統不支援 source 運算子。
  • 組合運算子和任意文字字詞 (例如 「p0 cases severity:s0」) 不會解讀。
  • 結果一律會與依關聯性排序的結果混合顯示。