Cloud Search 的查詢解釋功能會自動解讀使用者查詢中的運算子和篩選器,並將這些元素轉換成以運算子為基礎的結構化查詢。查詢解讀功能會使用結構定義中定義的運算子和已建立索引的文件,推斷使用者查詢的意義。這個功能可讓使用者使用最少的關鍵字進行搜尋,同時仍取得精確的結果。
向使用者顯示的實際結果取決於查詢解讀的信心。可信度取決於多項因素,包括查詢字串出現在已建立索引文件中的位置。在名為 actors
的結構定義欄位中,字串就像演員「Tom Hanks」而得,例如出現者名稱,藉此產生更高的可信度。如果在段落內顯示相同的字串 (「Tom Hanks」),而不是結構定義欄位,可能會導致可信度降低。如果資料可信度高,使用者只會看到查詢解釋的結果。如果可信度較弱,系統會將查詢解讀的結果與一般關鍵字搜尋結果混合。
查詢解讀範例
假設您有一個包含電影資訊的資料來源 (例如資料庫)。圖 1 顯示搜尋查詢範例和相關解釋。
以這個查詢範例來說,查詢解讀功能會執行以下操作:
剖析結構定義,並判定資料來源中的頂層物件已歸類為
objecttype:movies
。現在,查詢解釋已知道查詢中的「movies」是物件類型。掃描資料來源中的文件與結構定義,以確定字串「action」的出現位置。如果字串主要出現在特定「類型」資料來源欄位中,則查詢解釋同意「action」是結構定義中定義的「類型」屬性的屬性值。如果字串主要出現在內容段落中,則查詢解讀的信賴水準會降低。
產生的查詢解釋如下:
actor:“tom hanks” genre:action objecttype:movies
系統會自動為所有 Cloud Search 客戶啟用查詢解釋功能,無須進行額外工作。不過,為了獲得最佳查詢解讀效果,建議您按照本文件的操作說明建構結構定義。
建立結構定義以支援查詢解讀功能
您應該建構結構定義結構,確保您可以受益於查詢解讀。
啟用顯示名稱解讀功能
Cloud Search 的查詢解譯功能會使用結構定義中的 objectDefinitions
和 propertyDefinitions
,解讀使用者的查詢並調整結果。為了充分運用這些結構定義元素,您應使用 displayLabel
、屬性名稱、objectDisplayLabel
、運算子 (運算子) 來建立符合直覺的顯示名稱。operatorName
以下結構定義顯示電影物件的簡單易懂顯示名稱:
{
"objectDefinitions": [
{
"name": "movie",
"options": {
"displayOptions": {
"objectDisplayLabel": "Films"
}
...
},
"propertyDefinitions": [
{
"name": "genre",
"isReturnable": true,
"isRepeatable": true,
"isFacetable": true,
"textPropertyOptions": {
"retrievalImportance": { "importance": "HIGHEST" },
"operatorOptions": {
"operatorName": "genre"
}
},
"displayOptions": {
"displayLabel": "Category"
}
},
...
]
}
]
}
在先前的範例中:
電影物件定義含有「電影」
objectDisplayLabel
。類型 resourceDefinition 包含「類型」
operatorName
和「類別」displayLabel
。
Cloud Search 能透過這些顯示名稱解讀下列查詢內容:
- 「動作片」、「類型動作類型電影」或「電影類型動作」會被解釋為
genre:action object:movies
。 - 「含有類型動作或驚悚的電影」會被解讀為
objecttype:movies genre:(action OR thriller)
。 - 「動作片」或「動作片」會被解讀為
genre:action objecttype:movies
。 - 「喜劇類別電影」會被解讀為
genre:comedy objecttype:movies
。
啟用日期、數值及排序解讀功能
您應該為所有日期和數值屬性定義 IntegerOperatorOptions
中指定的 lessThanOperatorName
和 greaterThanOperatorName
。這些設定可啟用自動日期和數值解釋。此外,如要啟用排序解釋,請設定日期和數值屬性的 isSortable
選項。以下結構定義顯示如何啟用這些選項。
{
"objectDefinitions": [
{
"options": {
"displayOptions": {
"objectDisplayLabel": "Films"
}
},
"propertyDefinitions": [
{
"name": "runtime",
"isReturnable": true,
"isSortable": true,
"integerPropertyOptions": {
"orderedRanking": "DESCENDING",
"minimumValue": {
"value": 10
},
"maximumValue": {
"value": 500
},
"operatorOptions": {
"operatorName": "runtime",
"lessThanOperatorName": "runtimelessthan",
"greaterThanOperatorName": "runtimegreaterthan"
}
},
"displayOptions": {
"displayLabel": "Length"
}
},
{
"name": "releasedate",
"isReturnable": true,
"isSortable": true,
"datePropertyOptions": {
"operatorOptions": {
"operatorName": "releasedate",
"lessThanOperatorName": "releasedbefore",
"greaterThanOperatorName": "releasedafter"
}
}
}
]
}
]
}
在先前的範例中:
- 數字屬性
runtime
是指電影的長度。此屬性已設定runtimelessthan
和runtimegreaterthan
。 - 日期屬性
releaseDate
是指暖場器中的電影上映時間。此屬性已設定releasedbefore
和releasedafter
。
這些設定可讓 Cloud Search 解讀下列查詢內容:
- 假設今年是 2019 年,系統會解讀「今年上映的電影」為
objecttype: movies releasedafter:2019-1-1 releasedbefore:2019-12-31
。 - 假設週別是遊牧的第三週,系統會將「上週上映的電影」解讀為
objecttype: movies releasedafter:2019-3-10 releasedbefore:2019-3-16
- 「播放時間少於 90 的電影」會解讀為
objjecttype: movies runtimelessthan:90
。 - 假設今年是 2019 年,系統會將「今年上映的電影和長度超過 120 部」解讀為
releasedafter:2019-1-1 releasedbefore:2019-12-31 objecttype:movies runtimegreaterthan:120
。 - 「依發行日期排序電影」會篩選「objecttype: 電影」,顯示的結果則會在發行日期以遞增順序排列。
啟用預留運算子解讀功能
您也可以使用 type
、before
、after
和 objecttype
保留的內建運算子強化查詢解讀。為文件建立索引時,請按照下列步驟操作:
將
updateTime
欄位填入ItemMetadata
中的updateTime
欄位,以使用before
和after
運算子。這些設定可讓 Cloud Search 解讀下列查詢內容:- 「上週的電影」會列出上一週索引更新的所有電影。
- 「2019 年 1 月之前的電影」會列出 2019 年 1 月前建立索引的所有電影。
將
mimeType
欄位填入ItemMetadata
,以使用類型自動偵測功能。「動作影片」查詢會列出所有 MIME 類型為application/mp4
、application/mpeg4
、application/x-shockwave-flash
、video/
和application/vnd.google-apps.video
的動作電影文件。
查詢解讀限制
查詢解讀功能有下列限制。
- 查詢解釋僅適用於以下資料來源 ACL:
- 所有文件都會在網域中公開 (網域內的所有使用者皆可存取)。
- 所有文件皆為公開的資料來源 (擁有資料來源 ACL 存取權的所有文件)。
- 資料來源中的大部分文件都有相同的 ACL (所有文件都會沿用相同容器項目的 ACL),且未定義其他讀取器。
- 如果多個結構定義運算子的值相同,將該值解讀為查詢的運算子意圖,取決於查詢解讀系統傳回的整體可信度因素。舉例來說,假設您
priority
和severity
屬性與結構定義中定義的相同運算子名稱。假設兩個運算子的值可能是 0、1、2 或 3。在此範例中,查詢中的「0」可以參照priority
或severity
的運算子值。這些值不明確,信賴水準較低。 - 根據預設,Cloud Search 的查詢解譯功能會在解讀查詢時降低欄位值的大小寫,但使用
exactMatchWithOperator
選項定義的文字運算子除外。 - 查詢不支援
source
運算子。 - 系統不會解讀結合運算子字詞和任意文字字詞的查詢。例如,系統將不支援查詢「p0 priority case severity:s0」,因為「p0 優先案例」是免費的文字詞彙,而「severity:s0」是以運算子為基礎的字詞。
- 查詢解釋策略一律會將解讀的結果與一般 (非解讀、關聯性排名) 結果混合。而不會執行完整的頁面替換結果。