UDT query examples

How to query nested tuples and UDTs inside CQL lists and sets.

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.

Note: Selecting an entire UDT column in the CQL SELECT clause is supported. Selecting individual
fields of a UDT is supported for unfrozen tuples.

{!tuple}address.residents.field1:Alice AND address.residents.field2:Smith

The difference in syntax specifies to search across tuples or within a tuple.

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.

Query for locations that have a resident with the first name Alice using
the nested address.residents
tuple:

{!tuple}address.residents.field1:Alice

Query for locations with a resident that has the first name Alice and
second name
Smith:

Note: Tuples and UDTs are modelled internally as nested documents. The Apache Solr™ block join
is used internally to query them. Parents are identified with the
_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

Negative queries use this
syntax:

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)