列存在性查询

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_typecolumn_names设置。

  • 当设置return_typeColumnReturnType.SPECIFIED时,可以通过column_names指定返回的列。
  • 当设置return_typeColumnReturnType.ALL时,表示返回所有列。
  • 当设置return_typeColumnReturnType.NONE时,表示不返回所有列,只返回主键列。

示例

以下示例用于查询表所有数据中city列不为空的行。

  • 5.2.1及之后版本

    使用5.2.1及之后的SDK版本时,默认的返回结果为SearchResponse对象,请求示例如下:

    query = ExistsQuery("city")
    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)

    如果需要返回Tuple类型结果,您可以使用如下请求示例实现。

    query = ExistsQuery("city")
    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 = ExistsQuery("city")
    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)
    )

常见问题

相关文档