赛尔校园公共服务平台 Logo
平台使用
阿里云
百度云
移动云
智算服务
教育生态
登录 →
赛尔校园公共服务平台 Logo
平台使用 阿里云 百度云 移动云 智算服务 教育生态
登录
  1. 首页
  2. 阿里云
  3. 表格存储
  4. 开发参考
  5. SDK参考
  6. Go SDK
  7. 多元索引
  8. 数据查询
  9. 全文检索
  10. 匹配查询

匹配查询

  • 全文检索
  • 发布于 2025-04-22
  • 0 次阅读
文档编辑
文档编辑

MatchQuery采用近似匹配的方式查询表中的数据。对Text类型的列值和查询关键词会先按照设置好的分词器做切分,然后按照切分好后的词去查询。对于进行模糊分词的列,建议使用MatchPhraseQuery实现高性能的模糊查询。

前提条件

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

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

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

参数

参数

说明

TableName

数据表名称。

IndexName

多元索引名称。

Query

设置查询类型为MatchQuery。

FieldName

要匹配的列。

匹配查询可应用于Text类型。

Text

查询关键词,即要匹配的值。

当要匹配的列为Text类型时,查询关键词会被切分成多个词,分词类型为创建多元索引时设置的分词器类型。如果创建多元索引时未设置分词器类型,则默认分词类型为单字分词。

例如当要匹配的列为Text类型时,分词类型为单字分词,则查询词为"this is",可以匹配到“...,this is tablestore”、“is this tablestore”、“tablestore is cool”、“this"、“is”等。

Operator

逻辑运算符。默认为OR,表示当分词后的多个词只要有部分匹配时,则行数据满足查询条件。

如果设置Operator为AND,则只有分词后的所有词都在列值中时,才表示行数据满足查询条件。

MinimumShouldMatch

最小匹配个数。

只有当某一行数据的FieldName列的值中至少包括最小匹配个数的词时,才会返回该行数据。

说明

MinimumShouldMatch需要与逻辑运算符OR配合使用。

Offset

本次查询的开始位置。

Limit

本次查询需要返回的最大数量。

如果只为了获取行数,无需获取具体数据,可以设置Limit=0,即不返回任意一行数据。

GetTotalCount

是否返回匹配的总行数,默认为false,表示不返回。

返回匹配的总行数会影响查询性能。

ColumnsToGet

是否返回所有列,包含ReturnAll和Columns设置。

ReturnAll默认为false,表示不返回所有列,此时可以通过Columns指定返回的列;如果未通过Columns指定返回的列,则只返回主键列。

当设置ReturnAll为true时,表示返回所有列。

示例

以下示例用于查询表中Col_Keyword列的值能够匹配"hangzhou"的数据。

/**
 *  查询表中Col_Keyword列的值能够匹配"hangzhou"的数据,返回匹配到的总行数和一些匹配成功的行。
 */
func MatchQuery(client *tablestore.TableStoreClient, tableName string, indexName string) {
    searchRequest := &tablestore.SearchRequest{}
    searchRequest.SetTableName(tableName)
    searchRequest.SetIndexName(indexName)
    query := &search.MatchQuery{} //设置查询类型为MatchQuery。
    query.FieldName = "Col_Keyword" //设置要匹配的列。
    query.Text = "hangzhou" //设置要匹配的值。
    searchQuery := search.NewSearchQuery()
    searchQuery.SetQuery(query)
    searchQuery.SetGetTotalCount(true) 
    searchQuery.SetOffset(0) //设置offset为0。
    searchQuery.SetLimit(20) //设置limit为20,表示最多返回20条数据。
    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)) //返回的行数。
    for _, row := range searchResponse.Rows {
        jsonBody, err := json.Marshal(row)
        if err != nil {
            panic(err)
        }
        fmt.Println("Row: ", string(jsonBody)) //不设置columnsToGet,默认只返回主键。
    }
    // 设置返回所有列
    searchRequest.SetColumnsToGet(&tablestore.ColumnsToGet{
        ReturnAll:true,
    })
    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))
    for _, row := range searchResponse.Rows {
        jsonBody, err := json.Marshal(row)
        if err != nil {
            panic(err)
        }
        fmt.Println("Row: ", string(jsonBody))
    }
}

常见问题

  • 使用多元索引Search接口查不到数据

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

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

相关文档

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

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

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

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

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

相关文章

匹配查询 2025-04-22 14:25

MatchQuery采用近似匹配的方式查询表中的数据。对Text类型的列值和查询关键词会先按照设置好的分词器做切分,然后按照切分好后的词去查询。对于进行模糊分词的列,建议使用MatchPhraseQuery实现高性能的模糊查询。

短语匹配查询 2025-04-22 14:25

类似于MatchQuery,但是分词后多个词的位置关系会被考虑,只有分词后的多个词在行数据中以同样的顺序和位置存在时,才表示行数据满足查询条件。如果查询列的分词类型为模糊分词,则使用MatchPhraseQuery可以实现比WildcardQuery更快的模糊查询。

摘要与高亮 2025-04-22 14:25

在查询数据时通过设置高亮参数,返回命中查询词的片段信息并对查询词进行高亮显示。仅Text类型字段支持查询摘要与高亮功能。 前提条件

目录
Copyright © 2025 your company All Rights Reserved. Powered by 赛尔网络.
京ICP备14022346号-15
gongan beian 京公网安备11010802041014号