Cloud Search のクエリ解釈機能は、ユーザーのクエリ内の演算子とフィルタを自動的に解釈し、それらの要素を構造化された演算子ベースのクエリに変換します。クエリ解釈では、インデックス付きドキュメントとともに、スキーマで定義された演算子を使用して、ユーザのクエリの意味を推測します。この機能により、ユーザーは最小限のキーワードで検索できるとともに、正確な結果が得られます。
ユーザーに提示される実際の結果は、クエリ解釈の信頼度に依存します。信頼度は、クエリ文字列がインデックス付きドキュメントのどこに現れるかなど、いくつかの要因に基づきます。次のような文字列
俳優「トム・ハンクス」常に表示される
actors
というスキーマ フィールドを持つ方が信頼度が高くなります。同じ文字列(「Tom Hanks」)がスキーマ フィールドではなく段落内に表示されると、信頼度が低下する可能性があります。信頼度が高い場合、クエリ解釈からの結果のみがユーザーに表示されます。信頼度が低い場合、クエリ解釈からの結果に混ざり通常のキーワード検索結果が表示されます。
クエリ解釈の例
映画に関する情報を含むデータベースなどのデータソースがあるとします。図 1 は、検索クエリの例とその結果の解釈を示しています。
![クエリ解釈の概要](https://developers-dot-devsite-v2-prod.appspot.com/static/cloud-search/images/query-interpretation.png?authuser=6&hl=ja)
このクエリの例では、クエリ解釈によって次のことが行われます。
スキーマを解析し、データソースの最上位オブジェクトが
objecttype:movies
として分類されます。上記のクエリ解釈では、クエリ内の「movies」がオブジェクト タイプであることが認識されています。スキーマを併用してデータソース内のドキュメントをスキャンし、文字列「action」が現れる場所を特定します。この文字列が主に特定の「genre」データソース フィールドに現れる場合、クエリ解釈では、「action」がスキーマで定義されたプロパティ「genre」のプロパティ値であることを確実にします。この文字列が主にコンテンツの段落のコンテキスト内に現れる場合、クエリ解釈の信頼レベルは低下します。
結果のクエリ解釈は次のようになります。
actor:“tom hanks” genre:action objecttype:movies
クエリ解釈は、追加の作業なしで、すべての Cloud Search のお客様に対して自動的に有効になります。ただし、最適なクエリ解釈を実現するためには、このドキュメントの指示に従ってスキーマを構造化する必要があります。
クエリ解釈をサポートするためにスキーマを構造化する
クエリ解釈を活用できるようにスキーマを構造化する必要があります。
表示名の解釈を有効にする
Cloud Search のクエリ解釈では
objectDefinitions
、
propertyDefinitions
ユーザーのクエリを解釈し
表示されます。これらのスキーマ要素の利点を最大限に活用するには、
直感的にわかりやすい表示名で
displayLabel
プロパティ名
objectDisplayLabel
オブジェクト名には operatorName
、演算子には 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
として解釈されます。 - 「ジャンルのアクションまたはスリラーを含む映画」は、次のように解釈されます。
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
。 - 週が 3 月の 3 週目だとすると、「先週公開された映画」は
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
と解釈されます。 - 「sort movies by release date」の場合は「objecttype: movies」でフィルタリングが実行され、表示される結果は公開日で並べ替えられます。デフォルトの並べ替え順は昇順です。
予約済み演算子の解釈を有効にする
予約済みの組み込みツールである type
、before
、after
、objecttype
を使用することもできます。
演算子を使用して、クエリの解釈を強化します。ドキュメントをインデックス付けするときは、次のようにしてください。
次の URL の
updateTime
フィールドに、ItemMetadata
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」です。1 つのクエリで、演算子の値を参照できるのは、priority
またはseverity
。これらの値は曖昧なため、信頼レベルは低くなります。 - デフォルトでは、Cloud Search のクエリ解釈によってフィールドの大文字と小文字が
の値が使用されます。ただし、キーワードで定義されるテキスト演算子は除きます。
exactMatchWithOperator
オプション。 source
演算子はクエリではサポートされていません。- 演算子ベースの用語とフリーテキスト形式の用語を組み合わせたクエリは解釈されません。たとえば、「p0 priority cases severity:s0」というクエリはサポートされません。これは、「p0 priority cases」はフリーテキスト形式の用語で、「severity:s0」は演算子ベースの用語であるためです。
- クエリ解釈戦略では、解釈された結果と通常の(解釈されていない、関連性でランク付けされている)結果が常にブレンドされます。結果の全ページ置換は実行されません。