Cloud Search 的查詢解釋功能會自動解讀 在使用者查詢中嵌入運算子和篩選器,並將這些元素轉換成 結構化的結構化查詢查詢解讀使用定義的運算子 結合已建立索引的文件,推斷使用者的 定義。這項功能可讓使用者輕鬆搜尋 但仍可取得精確的結果
實際向使用者顯示的結果取決於信心
查詢解釋可信度取決於多項因素
包括查詢字串出現在已編入索引文件中的位置字串,例如
作為演員「Tom Hanks」持續在
名為 actors
的結構定義欄位會導致可信度較高。相同字串
(「湯姆漢克斯」) 顯示在段落中,而非架構欄位
導致可信度降低如果資料可信度高,系統只會顯示結果
並向使用者顯示手機
的信賴感,會將查詢解讀的結果混合到
關鍵字搜尋結果
查詢解讀範例
假設您有一個資料來源,例如資料庫 提供電影資訊圖 1 顯示搜尋查詢範例
![查詢解讀總覽](https://developers-dot-devsite-v2-prod.appspot.com/static/cloud-search/images/query-interpretation.png?authuser=7&hl=zh-tw)
以這個查詢範例來說 會執行以下動作:
剖析結構定義並判定資料來源中的頂層物件 已歸類為「
objecttype:movies
」。現在您已瞭解查詢解釋 「電影」屬於物件類型掃描資料來源中的文件並搭配結構定義, 用於確定字串「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
。
啟用日期、數值及排序解讀功能
您應該定義 lessThanOperatorName
和 greaterThanOperatorName
指定於
所有日期的 IntegerOperatorOptions
,
數值屬性。這些設定可啟用自動日期及
數值解釋此外,如要啟用排序解釋
設定日期和數值屬性的 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
以使用before
和after
運算子。這些 設定可讓 Cloud Search 解讀下列查詢內容:- 「上週的電影」會列出 建立索引。
- 「2019 年 1 月之前的電影」會列出所有已編入索引的電影 2019 年 1 月。
在
ItemMetadata
的mimeType
欄位填入資料,即可使用自動偵測功能 類型。「動作影片」查詢會列出所有包含 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」 是一種運算子字詞。
- 查詢解釋策略一律會將已解讀的結果 一般 (未解讀、關聯性排名) 的結果。因為這個模型不會 取代結果。