Cloud Search のクエリ解釈機能は、ユーザーのクエリ内の演算子とフィルタを自動的に解釈し、それらの要素を構造化された演算子ベースのクエリに変換します。クエリ解釈では、インデックス付きドキュメントとともに、スキーマで定義された演算子を使用して、ユーザのクエリの意味を推測します。この機能により、ユーザーは最小限のキーワードで検索できるとともに、正確な結果が得られます。
ユーザーに提示される実際の結果は、クエリ解釈の信頼度に依存します。信頼度は、クエリ文字列がインデックス付きドキュメントのどこに現れるかなど、いくつかの要因に基づきます。俳優の名前「Tom Hanks」などの文字列が actors
というスキーマ フィールドに一貫して表示される場合、信頼度は高くなります。同じ文字列(「Tom Hanks」)がスキーマ フィールドではなく段落内に表示されると、信頼度が低下する可能性があります。信頼度が高い場合、クエリ解釈からの結果のみがユーザーに表示されます。信頼度が低い場合、クエリ解釈からの結果に混ざり通常のキーワード検索結果が表示されます。
クエリ解釈の例
映画に関する情報を含むデータベースなどのデータソースがあるとします。図 1 は、検索クエリの例とその結果の解釈を示しています。

このクエリの例では、クエリ解釈によって次のことが行われます。
スキーマを解析し、データソース内の最上位オブジェクトが
objecttype:movies
に分類されるようにします。上記のクエリ解釈では、クエリ内の「movies」がオブジェクト タイプであることが認識されています。スキーマを併用してデータソース内のドキュメントをスキャンし、文字列「action」が現れる場所を特定します。この文字列が主に特定の「genre」データソース フィールドに現れる場合、クエリ解釈では、「action」がスキーマで定義されたプロパティ「genre」のプロパティ値であることを確実にします。この文字列が主にコンテンツの段落のコンテキスト内に現れる場合、クエリ解釈の信頼レベルは低下します。
結果のクエリ解釈は次のようになります。
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"
}
},
...
]
}
]
}
上記の例では、次のようになっています。
ムービー オブジェクト定義には「Film」
objectDisplayLabel
があります。genre propertyDefinition には、「genre」
operatorName
と「Category」displayLabel
があります。
これらの表示名により、Cloud Search では次のクエリ解釈を行うことができます。
- 「action movies」、「genre action type movies」、「movies genre action」は、
genre:action object:movies
と解釈されます。 - 「movies with genre action or willerer(ジャンル アクションまたはスリラー)」は
objecttype:movies genre:(action OR thriller)
と解釈されます。 - 「action movie」または「action movies」は
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 年であるとすると、「movies release this year」は
objecttype: movies releasedafter:2019-1-1 releasedbefore:2019-12-31
と解釈されます。 - 週が 3 月の 3 週である場合、「先週リリースされた映画」は
objecttype: movies releasedafter:2019-3-10 releasedbefore:2019-3-16
と解釈されます。 - 「movie with ランタイムが 90 未満」は、
objjecttype: movies runtimelessthan:90
と解釈されます。 - 年が 2019 年の場合、「今年リリースされた映画と長さが 120 を超える」は
releasedafter:2019-1-1 releasedbefore:2019-12-31 objecttype:movies runtimegreaterthan:120
と解釈されます。 - 「sort movies by release date」の場合は「objecttype: movies」でフィルタリングが実行され、表示される結果は公開日で並べ替えられます。デフォルトの並べ替え順は昇順です。
予約済み演算子の解釈を有効にする
予約済み組み込み演算子 type
、before
、after
、objecttype
を使用して、クエリ解釈を強化することもできます。ドキュメントをインデックス付けするときは、次のようにしてください。
ItemMetadata
のupdateTime
フィールドにデータを入力して、before
およびafter
演算子を使用します。これらの設定により、Cloud Search では次のクエリ解釈を行うことができます。- 「movies from last week」は、先週インデックス内で更新されたすべての映画を一覧表示します。
- 「movies before jan 2019」は、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 cases severity:s0」というクエリはサポートされません。これは、「p0 priority cases」はフリーテキスト形式の用語で、「severity:s0」は演算子ベースの用語であるためです。
- クエリ解釈戦略では、解釈された結果と通常の(解釈されていない、関連性でランク付けされている)結果が常にブレンドされます。結果の全ページ置換は実行されません。