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

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

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

查詢解讀範例

假設資料庫包含電影資訊。圖 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"
          }
        }
      }
    ]
  }]
}

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

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

查詢解讀限制

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