通配符查询中,要匹配的值可以是一个带有通配符的字符串,目前支持星号(*)和半角问号(?)两种通配符。要匹配的值中可以用星号(*)代表任意字符序列,或者用问号(?)代表任意单个字符,且支持以星号(*)或半角问号(?)开头。例如查询“table*e”,可以匹配到“tablestore”。
如果查询的模式为
*word*
(等价于
SQL
中的
WHERE field_a LIKE '%word%'
),则您可以使用性能更好的模糊查询,具体实现方法请参见
模糊查询
。该方案不会随数据量变大而导致性能下降。
如果要实现 NOT LIKE 功能,则 WildcardQuery 需要和 BoolQuery 中的 must_not_queries 结合使用。
前提条件
-
已初始化 OTSClient。具体操作,请参见 初始化 OTSClient 。
-
已在数据表上创建多元索引。具体操作,请参见 创建多元索引 。
参数
参数 |
描述 |
query |
设置查询类型为 WildcardQuery。 |
field_name |
列名称。 |
value |
带有通配符的字符串,字符串长度不能超过 32 个字符。 |
table_name |
数据表名称。 |
index_name |
多元索引名称。 |
limit |
本次查询需要返回的最大数量。 |
get_total_count |
是否返回匹配的总行数,默认为 False。 设置 get_total_count 为 True 后会影响查询性能。 |
ColumnsToGet |
是否返回所有列。
|
示例
以下示例用于使用通配符查询表中 Col_Keyword 列的值中匹配'tablestor*'的数据。
-
5.2.1 及之后版本
使用 5.2.1 及之后的 SDK 版本时,默认的返回结果为 SearchResponse 对象,请求示例如下:
query = WildcardQuery('Col_Keyword', 'tablestor*') 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) # # 当需要进行深度翻页时,推荐使用next_token进行翻页(翻页深度无限制) # 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))
如果需要返回 Tuple 类型结果,您可以使用如下请求示例实现。
query = WildcardQuery('Col_Keyword', 'tablestor*') 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()
-
5.2.1 之前版本
使用 5.2.1 之前的 SDK 版本时,默认的返回结果为 Tuple 类型,请求示例如下:
query = WildcardQuery('Col_Keyword', 'tablestor*') 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) )
常见问题
相关文档
-
多元索引查询类型包括 精确查询 、 多词精确查询 、 全匹配查询 、 匹配查询 、 短语匹配查询 、 前缀查询 、 范围查询 、 通配符查询 、 多条件组合查询 、 地理位置查询 、 嵌套类型查询 、 向量检索 和 列存在性查询 ,您可以选择合适的查询类型进行多维度数据查询。
如果要对结果集进行排序或者翻页,您可以使用排序和翻页功能来实现。具体操作,请参见 排序和翻页 。
如果要按照某一列对结果集做折叠,使对应类型的数据在结果展示中只出现一次,您可以使用折叠(去重)功能来实现。具体操作,请参见 折叠(去重) 。
-
如果要进行数据分析,例如求最值、求和、统计行数等,您可以使用 Search 接口的统计聚合功能或者 SQL 查询来实现。具体操作,请参见 统计聚合 和 SQL 查询 。
-
如果要快速导出数据,而不关心整个结果集的顺序时,您可以使用 ParallelScan 接口和 ComputeSplits 接口实现多并发导出数据。具体操作,请参见 并发导出数据 。