# Basic

This page describes basic queries and how to create a new query policy.

## Basic queries

Basic queries are read-only queries that return records to the client. A client application makes an API request to start a read-only query. This request in turn initiates parallel requests to each node in the cluster. The result returns the current version of each record to the client.

## Policies

The concept of short and long queries was introduced in Database 6.0. See [Differences between short and long queries](https://aerospike.com/docs/develop/learn/queries#differences-between-short-and-long-queries) for more information.

Query policies can be passed on a per-request basis. Policy values can be set to create a [filter expression](https://aerospike.com/docs/develop/expressions/#record-filtering-with-expressions), to determine whether bin data is included with the response, identify a short versus long query, and more.

::: note
Java client version 6.1.10 added PREFER\_RACK policy support to run basic queries on `prefer-rack` namespaces.
:::

The following example creates a new query policy that defines a [record filter expression](https://aerospike.com/docs/develop/expressions/#record-filtering-with-expressions) that compares the length of the `shape` list in the `report` map and returns `true` if greater than `2`.

```java
// Create query policy with Filter Expression

QueryPolicy queryPolicy = new QueryPolicy();

queryPolicy.filterExp = Exp.build(

    Exp.gt(

        ListExp.size(

            MapExp.getByKey(

                MapReturnType.VALUE,

                Exp.Type.LIST,

                Exp.val("shape"),

                Exp.mapBin("report")

            )

        ),

        Exp.val(2)

    )

);
```