ExistsQuery也叫NULL查询或者空值查询,一般用于判断稀疏数据中某一行的某一列是否存在。例如查询所有数据中address列不为空的行。
说明
- 如果需要查询某一列为空,则需要和BoolQuery中的must_not_queries结合使用。
- 以下情况会认为某一列不存在,以city列为例说明。
- city列在多元索引中的数据类型为keyword(或其他基础类型),如果数据表中某行数据不存在city列,则多元索引认为该行数据的city列不存在。
- city列在多元索引中的数据类型为keyword(或其他基础类型)数组,如果数据表中某行数据的city列为空数组,即"city" = "[]",则多元索引认为该行数据的city列不存在。
前提条件
参数
参数 | 说明 |
---|---|
field_name | 列名。 |
query | 设置查询类型为ExistsQuery。 |
get_total_count | 是否返回匹配的总行数,默认为False,表示不返回。 返回匹配的总行数会影响查询性能。 |
table_name | 数据表名称。 |
index_name | 多元索引名称。 |
columns_to_get | 是否返回所有列,包含return_type和column_names设置。
|
示例
查询表中city列不为空的行。
- 5.2.1及之后版本使用5.2.1及之后的SDK版本时,默认的返回结果为SearchResponse对象,请求示例如下:
query = ExistsQuery("city") search_response = client.search( table_name, index_name, SearchQuery(query, limit=100, get_total_count=True), ColumnsToGet(return_type=ColumnReturnType.ALL) )
如果需要返回Tuple类型结果,您可以使用如下请求示例实现。query = ExistsQuery("city") rows, next_token, total_count, is_all_succeed, agg_results, group_by_results = client.search( table_name, 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 = ExistsQuery("city") rows, next_token, total_count, is_all_succeed = client.search( table_name, index_name, SearchQuery(query, limit=100, get_total_count=True), ColumnsToGet(return_type=ColumnReturnType.ALL) )