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:
Tablestore SDK for Java: Prefix query
Tablestore SDK for Go: Prefix query
Tablestore SDK for Python: Prefix query
Tablestore SDK for Node.js: Prefix query
Tablestore SDK for .NET: Prefix query
Tablestore SDK for PHP: 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());
}