查询后过滤

更新时间:
复制 MD 格式

使用 Tablestore Go SDK 在查询和统计聚合之后过滤返回结果。

前提条件

安装Tablestore Go SDK并初始化客户端。

功能说明

查询后过滤通过 SearchFilter 对查询结果进行过滤。过滤在查询和统计聚合计算之后执行,因此不会改变统计聚合结果,仅影响返回的行和匹配总数。该功能可用于调整查询条件的执行阶段;合理使用可以提升查询性能。

重要

主查询支持 Search 的全部查询类型,但不建议使用 MatchAllQuery。过滤条件仅支持 TermQuery、TermsQuery、RangeQuery、ExistsQuery 及由这些类型组成的 BoolQuery。BoolQuery 仅支持 MustQueries、MustNotQueries 和 ShouldQueries,不支持 FilterQueries。过滤字段仅支持 Keyword、Long 和 Double 类型,且必须启用排序与统计聚合。过滤条件不支持设置 Weight。

filter := (&search.SearchFilter{}).SetQuery(
    &search.TermQuery{FieldName: "status", Term: "active"},
)
searchQuery := search.NewSearchQuery().
    SetQuery(&search.TermQuery{FieldName: "category", Term: "books"}).
    SetSearchFilter(filter).
    SetGetTotalCount(true)

response, err := client.Search(&tablestore.SearchRequest{
    TableName:   "example_table",
    IndexName:   "example_index",
    SearchQuery: searchQuery,
})
if err != nil {
    log.Fatal(err)
}

fmt.Println(response.TotalCount)
fmt.Println(response.Rows)

参数说明

名称

类型

说明

Query(必选)

search.Query

过滤条件。仅支持 TermQuery、TermsQuery、RangeQuery、ExistsQuery 及其 BoolQuery 组合。

返回值

名称

类型

说明

TotalCount

int64

匹配总行数。返回值取决于 SetGetTotalCount 配置。

Rows

[]*tablestore.Row

本次查询返回的行数据,数量不超过 SetLimit 指定的值。

SearchHits

[]*tablestore.SearchHit

查询命中结果。配置摘要与高亮、嵌套 InnerHits 或需要相关性评分时,从该字段读取结果。

NextToken

[]byte

下一页凭证。值非空时,将其传入下一次查询继续读取。

IsAllSuccess

bool

是否已成功查询全部索引分区。值为 false 时返回的是部分结果,TotalCount 可能小于实际匹配行数。

AggregationResults

search.AggregationResults

统计聚合结果。

GroupByResults

search.GroupByResults

分组结果。