BoolQuery查询条件包含一个或者多个子查询条件,根据子查询条件来判断一行数据是否满足查询条件。每个子查询条件可以是任意一种Query类型,包括BoolQuery。
前提条件
参数
参数 | 说明 |
---|---|
must_queries | 多个Query列表,行数据必须满足所有的子查询条件才算匹配,等价于And操作符。 |
must_not_queries | 多个Query列表,行数据必须不能满足任何的子查询条件才算匹配,等价于Not操作符。 |
filter_queries | 多个Query列表,行数据必须满足所有的子filter才算匹配,filter类似于query,区别是filter不会根据满足的filter个数进行相关性算分。 |
should_queries | 多个Query列表,可以满足,也可以不满足,等价于Or操作符。
行数据应该至少满足should_queries子查询条件的最小匹配个数才算匹配。 如果满足的should_queries子查询条件个数越多,则整体的相关性分数更高。 |
minimum_should_match | should_queries子查询条件的最小匹配个数。默认值为1。 |
table_name | 数据表名称。 |
index_name | 多元索引名称。 |
示例
# 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)
)