帮助文档 Logo
平台使用
阿里云
百度云
移动云
智算服务
教育生态
登录 →
帮助文档 Logo
平台使用 阿里云 百度云 移动云 智算服务 教育生态
登录
  1. 首页
  2. 阿里云
  3. 表格存储
  4. 开发参考
  5. SDK参考
  6. Go SDK
  7. 多元索引
  8. 数据查询
  9. 多条件组合查询

多条件组合查询

  • 数据查询
  • 发布于 2025-04-22
  • 0 次阅读
文档编辑
文档编辑

BoolQuery查询条件包含一个或者多个子查询条件,根据子查询条件来判断一行数据是否满足查询条件。每个子查询条件可以是任意一种Query类型,包括BoolQuery。

前提条件

  • 已初始化Client。具体操作,请参见初始化OTSClient。

  • 已创建数据表并写入数据。具体操作,请参见创建数据表和写入数据。

  • 已在数据表上创建多元索引。具体操作,请参见创建多元索引。

参数

参数

说明

TableName

数据表名称。

IndexName

多元索引名称。

MustQueries

多个Query列表,行数据必须满足所有的子查询条件才算匹配,等价于And操作符。

MustNotQueries

多个Query列表,行数据必须不能满足任何的子查询条件才算匹配,等价于Not操作符。

FilterQueries

多个Query列表,行数据必须满足所有的子Filter才算匹配,Filter类似于Query,区别是Filter不会根据满足的Filter个数进行相关性算分。

ShouldQueries

多个Query列表,可以满足,也可以不满足,等价于Or操作符。

行数据应该至少满足ShouldQueries子查询条件的最小匹配个数才算匹配。

如果满足的ShouldQueries子查询条件个数越多,则整体的相关性分数更高。

MinimumShouldMatch

ShouldQueries子查询条件的最小匹配个数。当同级没有其他Query,只有ShouldQueries时,默认值为1;当同级已有其他Query,例如MustQueries、MustNotQueries和FilterQueries时,默认值为0。

示例

以下示例用于通过BoolQuery进行多条件组合查询。

/**
 * 通过BoolQuery进行多条件组合查询。
 */
func BoolQuery(client *tablestore.TableStoreClient, tableName string, indexName string) {
    searchRequest := &tablestore.SearchRequest{}
    searchRequest.SetTableName(tableName)
    searchRequest.SetIndexName(indexName)

    /**
     * 查询条件一:RangeQuery,Col_Long的列值大于3。
     */
    rangeQuery := &search.RangeQuery{}
    rangeQuery.FieldName = "Col_Long"
    rangeQuery.GT(3)

    /**
     * 查询条件二:MatchQuery,Col_Keyword的列值要匹配"hangzhou"。
     */
    matchQuery := &search.MatchQuery{}
    matchQuery.FieldName = "Col_Keyword"
    matchQuery.Text = "hangzhou"

    {
        /**
         * 构造一个BoolQuery,设置查询条件是必须同时满足"查询条件一"和"查询条件二"。
         */
        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))
    }
    {
        /**
         * 构造一个BoolQuery,设置查询条件是至少满足"条件一"和"条件二"中的一个。
         */
        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接口查不到数据

  • 如何将多元索引Search接口查询数据的limit提高到1000

  • 为什么使用多元索引翻页查询时Token失效了?

相关文档

  • 多元索引查询类型包括精确查询、多词精确查询、全匹配查询、匹配查询、短语匹配查询、前缀查询、范围查询、通配符查询、多条件组合查询、地理位置查询、嵌套类型查询、向量检索和列存在性查询,您可以选择合适的查询类型进行多维度数据查询。

    如果要对结果集进行排序或者翻页,您可以使用排序和翻页功能来实现。具体操作,请参见排序和翻页。

    如果要按照某一列对结果集做折叠,使对应类型的数据在结果展示中只出现一次,您可以使用折叠(去重)功能来实现。具体操作,请参见折叠(去重)。

  • 如果要进行数据分析,例如求最值、求和、统计行数等,您可以使用Search接口的统计聚合功能或者SQL查询来实现。具体操作,请参见统计聚合和SQL查询。

  • 如果要快速导出数据,而不关心整个结果集的顺序时,您可以使用ParallelScan接口和ComputeSplits接口实现多并发导出数据。具体操作,请参见并发导出数据。

相关文章

基础查询 2025-04-22 14:26

本文介绍表格存储Go SDK支持的多元索引基础查询类型。

全匹配查询 2025-04-22 14:26

MatchAllQuery可以匹配所有行,常用于查询表中数据总行数,或者随机返回几条数据。 前提条件

精确查询 2025-04-22 14:26

TermQuery采用完整精确匹配的方式查询表中的数据,类似于字符串匹配。对于Text类型字段,只要分词后有词条可以精确匹配即可。

多词精确查询 2025-04-22 14:26

类似于TermQuery,但是TermsQuery可以指定多个查询关键词,查询匹配这些词的数据。多个查询关键词中只要有一个词精确匹配,该行数据就会被返回,等价于SQL中的In。 前提条

前缀查询 2025-04-22 14:26

PrefixQuery根据前缀条件查询表中的数据。对于Text类型字段,只要分词后的词条中有词条满足前缀条件即可。

通配符查询 2025-04-22 14:26

通配符查询中,要匹配的值可以是一个带有通配符的字符串,目前支持星号(*)和半角问号(?)两种通配符。要匹配的值中可以用星号(*)代表任意字符序列,或者用问号(?)代表任意单个字符,且支持以星号(*)或半角问号(?)开头。例如查询“table*e”,可以匹配到“tablestore”。 如果查询的模式

目录
Copyright © 2025 your company All Rights Reserved. Powered by 博智数字服务平台.
闽ICP备08105208号-1