# query()
A MilvusClient interface. This method queries entity(s) based on scalar field(s) filtered by boolean expression.
The order of the returned entities cannot be guaranteed.
```Java
R query(QueryParam requestParam);
```
## QueryParam
Use the `QueryParam.Builder` to construct a `QueryParam` object.
```Java
import io.milvus.param.QueryParam;
QueryParam.Builder builder = QueryParam.newBuilder();
```
Methods of `QueryParam.Builder`:
| Method | Description | Parameters |
| ------------------------------------------------------------ | ------------------------------------------------------------ | -------------------------------------------------------- |
| `withCollectionName(collectionName)` | Sets the collection name. The collection name cannot be empty or null. | `collectionName`: The name of the collection to query. |
| `withConsistencyLevel(ConsistencyLevelEnum consistencyLevel)` | Sets the consistency level used in the query. If the consistency level is not specified, the default level is `ConsistencyLevelEnum.BOUNDED`. | `consistencyLevel`: The [consistency level](../Misc/ConsistencyLevelEnum.md) used in the query. |
| `withPartitionNames(List partitionNames)` | Sets a partition name list to specify query scope (Optional). | `partitionNames`: The name list of the partitions to query. |
| `addPartitionName(String partitionName)` | Adds a partition to specify query scope (Optional). | `partitionName`: The name of the partition to query. |
| `withTravelTimestamp(Long ts)` | Specifies an absolute timestamp in a query to get results based on a data view at a specified point in time (Optional). The default value is `0`, with which the server executes the query on a full data view. For more information please refer to [Search with Time Travel](https://milvus.io/docs/v2.1.x/timetravel.md). | `ts`: An absolute timestamp value. |
| `withOutFields(List outFields)` | Specifies the output scalar fields (Optional). If the output fields are specified, the `QueryResults` returned by `query()` will contains the values of these fields. | `outFields`: The name list of output fields. |
| `addOutField(String fieldName)` | Specifies an output scalar field (Optional). | `fieldName`: The name of an output field . |
| `withExpr(String expr)` | Sets the expression to query entities. For more information please refer to [Boolean Expression Rules](https://milvus.io/docs/v2.1.x/boolean.md). | `expr`: The boolean expression used in the query. |
| `build()` | Constructs a `QueryParam` object. | N/A |
The `QueryParam.Builder.build()` can throw the following exceptions:
- `ParamException`: error if the parameter is invalid.
## Returns
This method catches all the exceptions and returns an `R` object.
- If the API fails on the server side, it returns the error code and message from the server.
- If the API fails by RPC exception, it returns `R.Status.Unknow` and the error message of the exception.
- If the API succeeds, it returns valid `QueryResults` held by the R template. You can use `QueryResultsWrapper` to get the query results.
## QueryResultsWrapper
A tool class to encapsulate the `QueryResults`.
```Java
import io.milvus.response.QueryResultsWrapper;
QueryResultsWrapper wrapper = new QueryResultsWrapper(queryResults);
```
Methods of `QueryResultsWrapper`:
| Method | Description | Parameters | Returns |
| ----------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | ---------------- |
| `getFieldWrapper(String fieldName)` | Returns a `FieldDataWrapper` object by a field name. `ParamException` is thrown if the field does not exist. | `fieldName`: a field name which is specified by the `withOutFields()` of `QueryParam`. | FieldDataWrapper |
## FieldDataWrapper
A tool class to encapsulate field data returned by `query()` API.
Methods of `FieldDataWrapper`:
| Method | Description | Returns |
| ----------------- | ------------------------------------------------------------ | ------------------------------------------------------------ |
| `isVectorField()` | Indicated whether this field is a vector field or a scalar field. | Boolean |
| `getDim()` | Gets the dimension value if the field is a vector field. `IllegalResponseException` is thrown if the field is not a vector field. | int |
| `getRowCount()` | Gets the row count of a field. `IllegalResponseException` is thrown if the field data is illegal. | long |
| `getFieldData()` | Returns the field data according to field type. | Returns `List>` for float vector field.
Returns `List` for binary vector field. Returns `List` for int64 field. Returns `List` for int32/int16/int8 field. Returns `List` for boolean field. Returns `List` for float field. Returns `List` for double field.Returns `List` for VARCHAR field. |
## Example
```Java
import io.milvus.param.*;
import io.milvus.response.QueryResultsWrapper;
import io.milvus.response.FieldDataWrapper;
import io.milvus.grpc.QueryResults;
QueryParam param = QueryParam.newBuilder()
.withCollectionName("collection1")
.withExpr("id in [100, 101]")
.addOutFields("field1")
.withConsistencyLevel(ConsistencyLevelEnum.EVENTUALLY)
.build();
R response = client.query(param)
if (response.getStatus() != R.Status.Success.getCode()) {
System.out.println(response.getMessage());
}
QueryResultsWrapper wrapper = new QueryResultsWrapper(response.getData());
FieldDataWrapper fieldData = queryResultsWrapper.getFieldWrapper("field1");
System.out.println("Field " + fieldName + " row count: " + fieldData.getRowCount());
System.out.println(fieldData.getFieldData());
```