UDT query examples
Examples of UDT queries. UDTs are a specialization of tuples.
You can query nested
tuples and UDTs inside CQL lists and sets. UDTs are a specialization of tuples. In these
examples, {!tuple}
applies to both UDTs and tuples.
More examples are available in the DataStax Developer Blog post Tuple and UDT support in DSE Search.
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'}
Remember
on CQL that to use a single quotation mark itself 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 for 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, you use the tuple query parser for tuples and UDTs. In this example, the dot notation identifies address.resident as a UDT.
address.residents
tuple, you can query for
locations that have a resident with the first name
Alice
:{!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)