All Products
Search
Document Center

Tablestore:Prefix query

Last Updated:Jun 24, 2024

You can perform a prefix query to query data that matches the specified prefix. If the type of a column is TEXT, Tablestore tokenizes the string and uses the specified prefix to match the tokens.

API operation

You can call the Search or ParallelScan operation and set the query type to PrefixQuery to perform a prefix query.

Use Tablestore SDKs

You can use the following Tablestore SDKs to perform a prefix query:

Parameters

Parameter

Description

query

The type of the query. Set the query parameter to PrefixQuery.

fieldName

The name of the column that you want to query.

prefix

The prefix.

If the column used to match the prefix condition is a TEXT column, the column is tokenized. A row meets the query conditions when at least one token contains the specified prefix.

getTotalCount

Specifies whether to return the total number of rows that meet the query conditions. Default value: false.

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

weight

The weight that you want to assign to the column that you want to query to calculate the BM25-based keyword relevance score. This parameter is used in full-text search scenarios. If you specify a higher weight for the column that you want to query, the BM25-based keyword relevance score is higher for the row. The value of this parameter is a positive floating point number.

This parameter does not affect the number of rows that are returned. However, this parameter affects the BM25-based keyword relevance scores of the query results.

tableName

The name of the data table.

indexName

The name of the search index.

columnsToGet

Specifies whether to return all columns of each row that meets the query conditions. You can specify the returnAll and columns fields for this parameter.

The default value of the returnAll field is false, which specifies that not all columns are returned. In this case, you can use the columns field 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 you set the returnAll field to true, all columns are returned.

Examples

/**
 * The following sample code provides an example on how to query the rows in which the value of the Col_Keyword column contains the prefix that exactly matches hangzhou: 
 * @param client
 */
private static void prefixQuery(SyncClient client) {
    SearchQuery searchQuery = new SearchQuery();
    PrefixQuery prefixQuery = new PrefixQuery(); // Set the query parameter to PrefixQuery. 
    searchQuery.setGetTotalCount(true);
    prefixQuery.setFieldName("Col_Keyword");
    prefixQuery.setPrefix("hangzhou");
    searchQuery.setQuery(prefixQuery);
    //searchQuery.setGetTotalCount(true); // Specify that the total number of matched rows is returned. 

    SearchRequest searchRequest = new SearchRequest("sampleTable", "sampleSearchIndex", searchQuery);
    // You can use the columnsToGet parameter to specify the columns that you want to return or specify that all columns are returned. If you do not specify this parameter, only the primary key columns are returned. 
    //SearchRequest.ColumnsToGet columnsToGet = new SearchRequest.ColumnsToGet();
    //columnsToGet.setReturnAll(true); // Specify that all columns are returned. 
    //columnsToGet.setColumns(Arrays.asList("ColName1","ColName2")); // Specify the columns that you want to return. 
    //searchRequest.setColumnsToGet(columnsToGet);

    SearchResponse resp = client.search(searchRequest);
    //System.out.println("TotalCount: " + resp.getTotalCount()); // Specify that the total number of rows that meet the query conditions instead of the number of returned rows is displayed. 
    System.out.println("Row: " + resp.getRows());
}