Skip to main content

Secondary Index Queries

info

Prior to Server 6.0, secondary index (SI) queries were called queries. See the Queries feature guide for more information.

Jump to the Code block for a combined complete example.

Basic SI queries can employ the following index filters:

  • Equality comparison against string or numeric indexes.
  • Range comparison against numeric indexes. Range result sets are inclusive of lower and upper limits.
  • Point-In-Region or Region-Contain-Point comparisons against geo indexes.

Filter Expressions can also be used with secondary index queries.

Policies

See Basic Queries for query policy information.

Setup

The following examples will use the setup and record structure below to illustrate batch operations in an Aerospike database.

The record structure:

Occurred: Integer  
Reported: Integer
Posted: Integer
Report: Map
{
shape: List,
summary: String,
city: String,
state: String,
duration: String
}
Location: GeoJSON

Create an index

note

You should plan and schedule index creation/removal on production systems as described in Secondary Index Capacity Planning. An index consumes RAM for every index entry. Background index creation/removal can take a substantial amount of resources. It is important to carefully plan and schedule index creation/removal on production systems.

The following command uses the Aerospike Admin (asadm) to create an integer index on the sandbox namespace, ufodata set, and occurred bin. This is the recommended way to create a secondary index.

asadm -e 'enable; manage sindex create numeric occurred_idx ns sandbox set ufodata bin occurred'

The Aersopike Client API can be used to create a secondary index as well. The following example creates the same index as the example above.

Remove an index

The following command uses the Aerospike Admin (asadm) to remove the index created above.

asadm -e 'enable; manage sindex delete occurred_idx ns sandbox set ufodata'

The Aersopike Client API can be used to remove a secondary index as well. The following example removes the same index as the example above.

Query an index

The following example queries the sandbox namespace and ufodata set name, with an inclusive range filter on the occurred bin, returning records with a bin value between 20210101 and 20211231.

Query an index with a Filter Expression

The following example will use the geo string defined in the expandable section below.

View the language specific data creation

This example queries the same namespace and set name, while using the same index filter as the example above, but adds a Filter Expression to the query policy to only return records with a location bin value within the geo region specified above.

Query an index then create a batch operation on the returned keys

Currently, Transaction and CDT operations are not available for basic queries. The following example shows how a basic query and a batch operation can be combined to use transaction operations on the results.

This example queries the same namespace and set name, while using the same index filter, geo region, and Filter Expression as above, but only returns record metadata, which is then used to create a batch operation to return only the city and state from the report map.

Pagination

See Pagination for more information.

Code block

Expand this section for a single code block to execute a basic SI query