UDT query examples
You can query nested tuples and UDTs
inside CQL lists and sets. A UDT facilitates handling multiple fields of related information
in a table. UDTs are a specialization of tuples. In these examples, {!tuple}
applies to both UDTs and tuples.
Querying fields
{!tuple}address.street:sesame
Querying dynamic fields
<dynamicField name="user.position_*" type="text" indexed="true" stored="true"/>
{!tuple}user.position_day1:second
{!tuple}user.position_day2:first
Querying collections
{!tuple}user.hobbies:swim
Querying across different UDT/tuple fields
+{!tuple v='father.name.firstname:Sam'} +{!tuple v='mother.name.firstname:Anne'}
In CQL, to use a single quotation mark in a string literal, you must
escape it using a single quotation mark (so you'll need to double the single quotation
marks). See CQL escaping characters.({!tuple}father.name.firstname:Sam AND {!tuple}mother.name.firstname:Anne)
Querying UDT/tuple fields with several conditions
{!tuple v='address.residents.field1:Alice AND address.residents.field2:Smith'}
You
can also use the discouraged
syntax:{!tuple}address.residents.field1:Alice AND address.residents.field2:Smith
- Across tuples:
+{!tuple v='condition1'} +{!tuple v='condition2'} +{!tuple v='conditionN'}
searches for documents that satisfy all conditions, but are not necessarily satisfied by the same single tuple/UDT. - Within a tuple:
{!tuple v='condition1 AND condition2 AND conditionN'}
searches for documents that satisfy all conditions within a single tuple/UDT.
Querying nested tuples and UDTs
To query nested tuples and UDTs, use the same dot notation and the tuple query parser. Because UDTs are a specialization of tuples, use the tuple query parser for tuples and UDTs. In this example, the dot notation identifies address.resident as a UDT.
Alice
using
the nested address.residents
tuple:{!tuple}address.residents.field1:Alice
Alice
and
second name
Smith
:+{!tuple v='address.residents.field1:Alice AND address.residents.field2:Smith'}
_parent_=true
field. Children are identified with
_parent_=false
. For certain types of queries, including negative queries
and empty field queries, you might need to use the _parent_
field. Querying for empty firstnames
The negation (-) and inclusion (+) operators must precede the {!tuple} directive:
-{!tuple}_parent_:false AND user.name.firstname:[* TO *]
Negative queries
select * from demo where solr_query='-{!tuple}name.firstname:*'
Negative
queries with more than one condition must follow the Solr rules. Use this syntax:
{!tuple v='address.street:* NOT (address.street:sesame AND address.number:32)'}
or-{!tuple v='address.street:sesame AND address.number:32'}
or{!tuple}address.street:* NOT (address.street:sesame AND address.number:32)