UDTクエリーの例
CQLリストとセット内にネストされているタプルとUDTをクエリーする方法。
CQLリストとセット内にネストされているタプルとUDTをクエリーできます。UDTを使用すると、テーブル内で関連する情報を持つ複数のフィールドを処理しやすくなります。UDTはタプルの特殊な型です。以下の例で、{!tuple}
はUDTとタプルの両方に適用されます。
注: CQL SELECT句内のUDTカラム全体を選択できます。unfrozenタプルでは、UDTのフィールドを個々に選択できます。
フィールドをクエリーする
{!tuple}address.street:sesame
動的フィールドをクエリーする
<dynamicField name="user.position_*" type="text" indexed="true" stored="true"/>
{!tuple}user.position_day1:second
{!tuple}user.position_day2:first
コレクションをクエリーする
{!tuple}user.hobbies:swim
異なるUDT/タプル・フィールドにわたりクエリーする
+{!tuple v='father.name.firstname:Sam'} +{!tuple v='mother.name.firstname:Anne'}
CQLで、文字列リテラル内に単一引用符を使用するには、単一引用符を使用してエスケープする必要があります(つまり、単一引用符を二重にする必要があります)。CQLの「文字のエスケープ」を参照してください。推奨されていない以下の構文も使用できます。
({!tuple}father.name.firstname:Sam AND {!tuple}mother.name.firstname:Anne)
複数の条件を使用してUDT/タプル・フィールドをクエリーする
複数の条件を満たすタプルを検索することができます。すべての条件が同じタプルに常に当てはまるかどうかに注意してください。例を次に示します。
{!tuple v='address.residents.field1:Alice AND address.residents.field2:Smith'}
推奨されていない以下の構文も使用できます。{!tuple}address.residents.field1:Alice AND address.residents.field2:Smith
複数のタプルにわたって検索するか、1つのタプル内を検索するかによって、構文が異なります。
- 複数のタプルにわたり検索:
+{!tuple v='condition1'} +{!tuple v='condition2'} +{!tuple v='conditionN'}
は、すべての条件を満たすドキュメントを検索します。ただし、同じ単一のタプル/UDTが満たしている必要はありません。 - 1つのタプル内を検索:
{!tuple v='condition1 AND condition2 AND conditionN'}
は、単一のタプル/UDT内ですべての条件を満たしているドキュメントを検索します。
ネストされたタプルとUDTをクエリーする
ネストされたタプルとUDTをクエリーするには、同じドット表記とタプル・クエリー・パーサーを使用します。UDTは特殊なタプルであるため、タプルとUDTのどちらにもタプル・クエリー・パーサーを使用します。この例では、ドット表記でaddress.residentをUDTとして識別しています。
ネストされた
address.residents
タプルを使用して、「Alice
」という名の居住者がいる場所をクエリーします。{!tuple}address.residents.field1:Alice
「
Alice
」という名で「Smith
」という姓の居住者がいる場所をクエリーします。+{!tuple v='address.residents.field1:Alice AND address.residents.field2:Smith'}
注: タプルとUDTは、ネストされたドキュメントとして内部でモデル化されています。これらについてクエリーするために、Apache Solr™ブロック結合が内部で使用されます。親は、
_parent_=true
フィールドで識別されます。子は、_parent_=false
で識別されます。否定クエリーや空のフィールド・クエリーなど、クエリーのタイプによっては_parent_
フィールドを使用する必要があります。空の名をクエリーする
否定(-)演算子と包含(+)演算子は、{!tuple}ディレクティブの前に配置する必要があります。
-{!tuple}_parent_:false AND user.name.firstname:[* TO *]
否定クエリー
否定クエリーでは以下の構文を使用します。
select * from demo where solr_query='-{!tuple}name.firstname:*'
複数の条件を持つ否定クエリーは、Solr規則に従う必要があります。以下の構文を使用します。{!tuple v='address.street:* NOT (address.street:sesame AND address.number:32)'}
または-{!tuple v='address.street:sesame AND address.number:32'}
または{!tuple}address.street:* NOT (address.street:sesame AND address.number:32)