前提条件
已初始化Client。具体操作,请参见初始化Tablestore Client。
已在数据表上创建多元索引。具体操作,请参见创建多元索引。
参数
|
参数 |
说明 |
|
TableName |
数据表名称。 |
|
IndexName |
多元索引名称。 |
|
MustQueries |
逻辑 AND 运算符。子查询列表,行数据必须满足所有子查询条件才返回。 |
|
MustNotQueries |
逻辑 NOT 运算符。子查询列表,满足任意子查询条件的行数据将被排除。 |
|
FilterQueries |
逻辑 AND 运算符,以筛选器方式执行。子查询列表,行数据必须满足所有子筛选条件才返回。与 MustQueries 的区别在于:FilterQueries 不计算相关性得分,仅做是否匹配的判断,适用于精确匹配、范围查询和数值条件等场景。 |
|
ShouldQueries |
逻辑 OR 运算符。子查询列表,行数据至少满足最小匹配个数的子查询条件才返回。满足的子查询条件越多,相关性得分越高。若未设置 MustQueries、MustNotQueries 或 FilterQueries,则默认至少满足 1 个子查询条件;若同时设置了上述条件,ShouldQueries 默认最小匹配个数为 0,仅作为相关性加分项。可通过 MinimumShouldMatch 显式设置最小匹配个数。 |
|
MinimumShouldMatch |
ShouldQueries 子查询条件的最小匹配个数。仅设置 ShouldQueries 时默认值为 1;同时设置 MustQueries、MustNotQueries 或 FilterQueries 时默认值为 0。 |
示例
以下示例展示两种常见的 BoolQuery 用法:第一个使用 MustQueries 要求所有条件同时满足(AND),第二个使用 ShouldQueries 要求至少满足其中一个条件(OR)。
/**
* 通过BoolQuery进行多条件组合查询。
*/
func BoolQuery(client *tablestore.TableStoreClient, tableName string, indexName string) {
searchRequest := &tablestore.SearchRequest{}
searchRequest.SetTableName(tableName)
searchRequest.SetIndexName(indexName)
// 查询条件一:范围查询,Col_Long > 3
rangeQuery := &search.RangeQuery{}
rangeQuery.FieldName = "Col_Long"
rangeQuery.GT(3)
// 查询条件二:匹配查询,Col_Keyword 包含 "hangzhou"
matchQuery := &search.MatchQuery{}
matchQuery.FieldName = "Col_Keyword"
matchQuery.Text = "hangzhou"
{
// MustQueries:两个条件必须同时满足(AND)
boolQuery := &search.BoolQuery{
MustQueries: []search.Query{
rangeQuery,
matchQuery,
},
}
searchQuery := search.NewSearchQuery()
searchQuery.SetQuery(boolQuery)
searchRequest.SetSearchQuery(searchQuery)
searchResponse, err := client.Search(searchRequest)
if err != nil {
fmt.Printf("%#v", err)
return
}
fmt.Println("IsAllSuccess: ", searchResponse.IsAllSuccess) // 返回结果是否完整
fmt.Println("TotalCount: ", searchResponse.TotalCount) // 满足条件的总行数(非返回行数)
fmt.Println("RowCount: ", len(searchResponse.Rows))
}
{
// ShouldQueries:至少满足一个条件(OR)
boolQuery := &search.BoolQuery{
ShouldQueries: []search.Query{
rangeQuery,
matchQuery,
},
MinimumShouldMatch: proto.Int32(1),
}
searchQuery := search.NewSearchQuery()
searchQuery.SetQuery(boolQuery)
searchRequest.SetSearchQuery(searchQuery)
searchResponse, err := client.Search(searchRequest)
if err != nil {
fmt.Printf("%#v", err)
return
}
fmt.Println("IsAllSuccess: ", searchResponse.IsAllSuccess) // 返回结果是否完整
fmt.Println("TotalCount: ", searchResponse.TotalCount) // 满足条件的总行数(非返回行数)
fmt.Println("RowCount: ", len(searchResponse.Rows))
}
}
常见问题
相关文档
多元索引查询类型包括精确查询、多词精确查询、全匹配查询、匹配查询、短语匹配查询、前缀查询、范围查询、通配符查询、多条件组合查询、地理位置查询、嵌套类型查询、向量检索和列存在性查询,您可以选择合适的查询类型进行多维度数据查询。
如果要对结果集进行排序或者翻页,您可以使用排序和翻页功能来实现。具体操作,请参见排序和翻页。
如果要按照某一列对结果集做折叠,使对应类型的数据在结果展示中只出现一次,您可以使用折叠(去重)功能来实现。具体操作,请参见折叠(去重)。
如果要进行数据分析,例如求最值、求和、统计行数等,您可以使用Search接口的统计聚合功能或者SQL查询来实现。具体操作,请参见统计聚合和SQL查询。
如果要快速导出数据,而不关心整个结果集的顺序时,您可以使用ParallelScan接口和ComputeSplits接口实现多并发导出数据。具体操作,请参见并发导出数据。