Use a term query to find rows whose field values exactly match a specified keyword. For TEXT fields, Tablestore tokenizes the field value and matches each token against the keyword — if any token matches, the row is returned. The keyword itself is not tokenized.
Prerequisites
-
An OTSClient instance is initialized. For more information, see Initialize a Tablestore client.
-
A data table is created and data is written to the data table. For more information, see Create a data table and Write data.
-
A search index is created for the data table. For more information, see Create a search index.
Parameters
|
Parameter |
Description |
|
query_type |
The query type. Set to TermQuery. |
|
field_name |
The name of the field to query. |
|
term |
The keyword to match against field values. The keyword is not tokenized — it is matched as a whole. For TEXT fields, Tablestore tokenizes the field value and checks each token against the keyword. A row is returned if any token exactly matches. For example, if a TEXT field contains "tablestore is cool", the value is tokenized into "tablestore", "is", and "cool". Querying for "tablestore", "is", or "cool" returns the row. |
|
table_name |
The name of the data table. |
|
index_name |
The name of the search index. |
|
limit |
The maximum number of rows to return. Set to 0 to get only the row count without returning row data. |
|
get_total_count |
Specifies whether to return the total number of matching rows. Default: false. Setting this to true reduces query performance. |
|
columns_to_get |
The columns to return for each matching row. Configure return_type and column_names as needed.
|
Examples
The following examples query rows where the Col_Keyword field exactly matches "tablestore".
-
Tablestore SDK for Python V5.2.1 or later
SDK for Python V5.2.1 and later returns a SearchResponse object by default. The following example shows a basic term query:
query = TermQuery('Col_Keyword', 'tablestore') search_response = client.search( '<TABLE_NAME>', '<SEARCH_INDEX_NAME>', SearchQuery(query, limit=100, get_total_count=True), ColumnsToGet(return_type=ColumnReturnType.ALL) ) print('request_id : %s' % search_response.request_id) print('is_all_succeed : %s' % search_response.is_all_succeed) print('total_count : %s' % search_response.total_count) print('rows : %s' % search_response.rows) # For deep pagination, use next_token — it has no limit on pagination depth. # all_rows = [] # next_token = None # # first round # search_response = client.search( # '<TABLE_NAME>', '<SEARCH_INDEX_NAME>', # SearchQuery(query, next_token=next_token, limit=100, get_total_count=True), # columns_to_get=ColumnsToGet(return_type=ColumnReturnType.ALL)) # all_rows.extend(search_response.rows) # # # loop # while search_response.next_token: # search_response = client.search( # '<TABLE_NAME>', '<SEARCH_INDEX_NAME>', # SearchQuery(query, next_token=search_response.next_token, limit=100, get_total_count=True), # columns_to_get=ColumnsToGet(return_type=ColumnReturnType.ALL)) # all_rows.extend(search_response.rows) # print('Total rows:%s' % len(all_rows))To get results as a Tuple instead, call
.v1_response():query = TermQuery('Col_Keyword', 'tablestore') rows, next_token, total_count, is_all_succeed, agg_results, group_by_results = client.search( '<TABLE_NAME>', '<SEARCH_INDEX_NAME>', SearchQuery(query, limit=100, get_total_count=True), ColumnsToGet(return_type=ColumnReturnType.ALL) ).v1_response() -
Tablestore SDK for Python earlier than 5.2.1
SDK for Python versions earlier than 5.2.1 return results as a Tuple by default:
query = TermQuery('Col_Keyword', 'tablestore') rows, next_token, total_count, is_all_succeed = client.search( '<TABLE_NAME>', '<SEARCH_INDEX_NAME>', SearchQuery(query, limit=100, get_total_count=True), ColumnsToGet(return_type=ColumnReturnType.ALL) )
FAQ
References
When you use a search index to query data, you can use the following query methods: term query, terms query, match all query, match query, match phrase query, prefix query, range query, wildcard query, geo query, Boolean query, KNN vector query, nested query, and exists query. You can use the query methods provided by the search index to query data from multiple dimensions based on your business requirements.
You can sort or paginate rows that meet the query conditions by using the sorting and paging features. For more information, see Sorting and paging.
You can use the collapse (distinct) feature to collapse the result set based on a specific column. This way, data of the specified type appears only once in the query results. For more information, see Collapse (distinct).
If you want to analyze data in a data table, you can use the aggregation feature of the Search operation or execute SQL statements. For example, you can obtain the minimum and maximum values, sum, and total number of rows. For more information, see Aggregation and SQL query.
If you want to obtain all rows that meet the query conditions without the need to sort the rows, you can call the ParallelScan and ComputeSplits operations to use the parallel scan feature. For more information, see Parallel scan.