使用 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 |
分组结果。 |