You can use match all query to match all rows in a table to query the total number of rows in the table and return multiple random rows.

Prerequisites

  • The OTSClient is initialized. For more information, see Initialization.
  • A data table is created. Data is written to the table.
  • A search index is created for the data table. For more information, see Create search indexes.

Parameters

ParameterDescription
queryThe query type. Set the query type to MatchAllQuery.
tableNameThe name of the data table.
indexNameThe name of the search index.
limitThe maximum number of rows that you want the current query to return.

If you want the current query to return multiple random rows of data, set limit to a positive integer.

To query only the number of matched rows without returning specific data, you can set limit to 0. This way, Tablestore returns the number of matched rows without data from the table.

columnsToGetSpecifies whether to return all columns.

By default, returnAll is false, which specifies that not all columns are returned. In this case, you can use columns to specify the columns that you want to return. If you do not specify the columns that you want to return, only the primary key columns are returned.

If returnAll is set to true, all columns are returned.

getTotalCountSpecifies whether to return the total number of rows that match the query conditions. By default, getTotalCount is false, which specifies that the total number of rows that match the query conditions is not returned.

If this parameter is set to true, the query performance is compromised.

Examples

/**
 * Use match all query to query the total number of rows in a table. 
 * @param client
 */
private static void matchAllQuery(SyncClient client) {
    SearchQuery searchQuery = new SearchQuery();

    /**
    * Set the query type to MatchAllQuery. 
    */
    searchQuery.setQuery(new MatchAllQuery()); 

    /**
     * In the MatchAllQuery-based query result, the value of TotalCount is the total number of rows in the table. 
     If you want the current query to return multiple random rows of data, set limit to a positive integer. 
     * To query only the number of matched rows without returning specific data, you can set limit to 0. This way, Tablestore returns the number of matched rows without data from the table. 
     */
    searchQuery.setLimit(0);
    SearchRequest searchRequest = new SearchRequest(TABLE_NAME, INDEX_NAME, searchQuery);

    /**
    * Specify that the total number of rows that match the query conditions is returned. 
    */ 
    searchQuery.setGetTotalCount(true);
    SearchResponse resp = client.search(searchRequest);
    /**
     * Check whether the returned total number of rows that match the query conditions is correct. If isAllSuccess is false, Tablestore may fail to query data on all servers and return a value that is smaller than the total number of rows that match the query conditions. 
     */
    if (!resp.isAllSuccess()) {
        System.out.println("NotAllSuccess!");
    }
    System.out.println("IsAllSuccess: " + resp.isAllSuccess());
    System.out.println("TotalCount: " + resp.getTotalCount()); // Specify that the total number of rows that match the query conditions is displayed. 
    System.out.println(resp.getRequestId());
}