您可以使用多条件组合查询(BoolQuery)接口进行复合条件查询。复合查询条件可以包含一个或者多个子查询条件,根据子查询条件是否满足来判断一行数据是否满足查询条件。

可以设置多种组合方式,例如设置多个子查询条件为mustQueries,则要求这些子查询条件必须都满足。设置多个子查询条件为mustNotQueries时,要求这些子查询条件都不能满足。

# k > 'key100' and (l > 110 and l < 200) and not (k = 'key121')
# and should_queries(k > 'key120' or l < 300, minimum_should_match=2)
bool_query = BoolQuery(
    must_queries=[
        RangeQuery('k', range_from='key100', include_lower=False),
        // 多条件组合查询。
        BoolQuery(
            // 设置需要满足的子查询条件。
            must_queries=[
                RangeQuery('l', range_from=110, include_lower=False),
                RangeQuery('l', range_to=200, include_upper=False)
            ],
        )
    ],
    // 设置需要排除的子查询条件。
    must_not_queries=[
        TermQuery('k', 'key121')
    ],
    should_queries=[
        RangeQuery('k', range_from='key120', include_lower=False),
        RangeQuery('l', range_to=300, include_upper=130)
    ],
    minimum_should_match=2
)

// 构造完整查询语句,包括排序字段,返回前100行,以及返回查询结果总的行数。
rows, next_token, total_count, is_all_succeed = client.search(
    table_name, index_name, 
    SearchQuery(
        bool_query, 
        sort=Sort(sorters=[FieldSort('l', SortOrder.ASC)]), 
        limit=100, 
        get_total_count=True), 
    ColumnsToGet(return_type=ColumnReturnType.ALL)
)