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

前提条件

  • 已初始化Client,详情请参见初始化
  • 已创建数据表并写入数据。
  • 已在数据表上创建多元索引,详情请参见创建多元索引

参数

参数 说明
TableName 数据表名称。
IndexName 多元索引名称。
Query 设置查询类型为RangeQuery。
FieldName 要匹配的字段。
From 起始位置的值。

设置范围条件时,大于(>)可以使用GT表示,大于等于(>=)可以使用GTE表示。

To 结束位置的值。

设置范围条件时,小于(<)可以使用LT表示;小于等于(<=)可以使用LTE表示。

IncludeLower 结果中是否需要包括From值,类型为Boolean。
IncludeUpper 结果中是否需要包括To值,类型为Boolean。
Sort 按照指定方式排序,详情请参见排序和翻页
ColumnsToGet 是否返回所有列,包含ReturnAll和Columns设置。

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

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

示例

/**
 * 查询表中Col_Long列大于3的数据,结果按照Col_Long列的值逆序排序。
 */
func RangeQuery(client *tablestore.TableStoreClient, tableName string, indexName string) {
    searchRequest := &tablestore.SearchRequest{}
    searchRequest.SetTableName(tableName)
    searchRequest.SetIndexName(indexName)
    searchQuery := search.NewSearchQuery()
    rangeQuery := &search.RangeQuery{} //设置查询类型为RangeQuery。
    rangeQuery.FieldName = "Col_Long" //设置要匹配的字段
    rangeQuery.GT(3) //设置该字段的范围条件为大于3。
    searchQuery.SetQuery(rangeQuery)
    //设置按照Col_Long列逆序排序。
    searchQuery.SetSort(&search.Sort{
        []search.Sorter{
            &search.FieldSort{
                FieldName: "Col_Long",
                Order:     search.SortOrder_DESC.Enum(),
            },
        },
    })
    searchRequest.SetSearchQuery(searchQuery)
    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("RowCount: ", len(searchResponse.Rows))
    for _, row := range searchResponse.Rows {
        jsonBody, err := json.Marshal(row)
        if err != nil {
            panic(err)
        }
        fmt.Println("Row: ", string(jsonBody))
    }
}