后缀查询

更新时间:
复制 MD 格式

后缀查询(SuffixQuery)是通过指定后缀条件查询索引中的数据,例如通过手机尾号后4位查询快递。

功能概述

后缀查询主要用于查找以特定后缀结尾的数据。使用SuffixQuery功能查询数据时,您需要指定后缀值。

当前支持用于SuffixQuery的数据类型只有FuzzyKeyword。FuzzyKeyword是专门为SuffixQuery、PrefixQuery和WildcardQuery等模糊查询功能优化过的数据类型,在小、中、大规模数据上的查询性能均会更好更稳定,且性能基本不会随着数据规模增长而下降。

说明
  • FuzzyKeyword类型的字段不支持排序和统计聚合。如果FuzzyKeyword类型的字段同时需要进行排序或统计聚合,可以通过虚拟列为Keyword类型实现。

  • 如果希望在Keyword类型上实现后缀查询效果,您可以在写入数据时将数据翻转,然后使用前缀查询(PrefixQuery)功能进行数据查询。

接口

后缀查询的接口为Search或者ParallelScan,具体的Query类型为SuffixQuery。

参数说明

查询请求

request 的类型为 SearchRequest,包含以下参数。

名称

类型

说明

tableName(必选)

String

数据表名称。

indexName(必选)

String

多元索引名称。

searchQuery(必选)

SearchQuery

查询条件和通用查询配置。

columnsToGet(可选)

SearchRequest.ColumnsToGet

返回列配置。未设置时只返回主键列。

timeoutInMillisecond(可选)

int

请求级查询超时时间,单位为毫秒。默认值为 -1,表示不单独设置查询超时时间。

routingValues(可选)

List<PrimaryKey>

自定义路由字段对应的主键值列表。未配置自定义路由时无需设置。

查询配置

request.searchQuery 的类型为 SearchQuery,包含以下参数。

名称

类型

说明

query(必选)

Query

查询条件。后缀查询设置为 SuffixQuery。

offset(可选)

Integer

本次查询的起始位置。

limit(可选)

Integer

本次查询返回的最大行数。设置为 0 时不返回具体行。

collapse(可选)

Collapse

结果折叠配置,用于按指定列对返回结果去重。有关配置方法,请参见折叠(去重)。

sort(可选)

Sort

返回结果的排序方式。FuzzyKeyword 字段不能作为排序字段。有关配置方法,请参见排序和翻页。

trackTotalCount(可选)

int

期望统计的最大匹配行数。默认值为 TRACK_TOTAL_COUNT_DISABLED,表示不统计;设置为 TRACK_TOTAL_COUNT 时统计全部匹配行。值越小,查询性能越高。

filter(可选)

SearchFilter

对 query 的查询结果进行过滤。

aggregationList(可选)

List<Aggregation>

统计聚合配置。FuzzyKeyword 字段不能作为统计聚合字段。有关配置方法,请参见统计聚合。

groupByList(可选)

List<GroupBy>

分组配置。FuzzyKeyword 字段不能作为分组字段。有关配置方法,请参见统计聚合。

token(可选)

byte[]

翻页凭证。将上一次响应的 nextToken 设置为该参数可继续读取后续数据。设置 token 时,SDK 会清除 sort,因为翻页凭证中已包含排序条件。

查询条件

request.searchQuery.query 的类型为 SuffixQuery,包含以下参数。

名称

类型

说明

fieldName(必选)

String

要查询的 FuzzyKeyword 类型索引字段名称。

suffix(必选)

String

查询字符串。完整字段值必须以该字符串结尾,且匹配区分大小写。

weight(可选)

float

查询条件的相关性权重,必须为正浮点数。值越大,该查询条件对 BM25 相关性评分的贡献越高。该参数不影响匹配结果和返回行数,仅在使用 ScoreSort 按相关性评分排序时影响结果顺序。默认值为 1.0。

返回列

request.columnsToGet 的类型为 SearchRequest.ColumnsToGet,包含以下参数。

名称

类型

说明

columns(可选)

List<String>

要返回的属性列名称。仅 returnAll 和 returnAllFromIndex 均为 false 时需要设置;未设置时只返回主键列。

returnAll(可选)

boolean

是否返回数据表中的全部属性列。默认值为 false。

returnAllFromIndex(可选)

boolean

是否返回已建立索引的全部属性列。默认值为 false。不能与 returnAll 同时设置为 true。

使用方式

您可以使用控制台或者SDK进行后缀查询。进行后缀查询之前,您需要完成如下准备工作。

使用控制台

  1. 进入索引管理页签。

    1. 登录表格存储控制台。

    2. 在页面上方,选择资源组和地域。

    3. 在概览页面,单击实例名称或在操作列单击实例管理。

    4. 在实例详情页签下的数据表列表页签,单击数据表名称或在操作列单击索引管理。

  2. 在索引管理页签,单击目标多元索引操作列的搜索。

    1. 系统默认返回所有列,如需显示指定属性列,关闭获取所有列并输入需要返回的属性列,多个属性列之间用半角逗号(,)隔开。

      说明

      系统默认会返回数据表的主键列。

    2. 根据需要选择逻辑操作符为 And、Or 或者 Not。

      当选择逻辑操作符为 And 时,返回满足指定条件的数据。当选择逻辑操作符为 Or 时,如果配置了单个条件,则返回满足指定条件的数据;如果配置了多个条件,则返回满足任意一个条件的数据。当选择逻辑操作符为 Not 时,返回不满足指定条件的数据。

    3. 选择FuzzyKeyword类型的索引字段,单击添加。

    4. 设置索引字段的查询类型为后缀查询(SuffixQuery)和输入要查询的值。

    5. 系统默认关闭排序功能,如需根据指定字段对返回结果进行排序,打开是否排序开关后,根据需要添加要进行排序的字段并配置排序方式。

    6. 系统默认关闭统计功能,如需对指定字段进行数据统计,打开是否统计开关后,根据需要添加要进行统计的字段和配置统计信息。

  3. 单击确定。

    符合查询条件的数据会显示在索引管理页签中。

使用SDK

您可以通过Java SDK使用后缀查询。

重要
  • 表格存储Java SDK从5.17.0版本开始支持后缀查询功能。

  • 使用SDK进行后缀查询前,您需要初始化Client。具体操作,请参见初始化Client。

以下示例查询 FuzzyKeyword 类型的 phone 字段值以 1234 结尾的数据,返回最多 10 行数据及匹配总行数。

String tableName = "example_table";
String indexName = "example_index";

SuffixQuery suffixQuery = new SuffixQuery();
suffixQuery.setFieldName("phone");
suffixQuery.setSuffix("1234");

SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(suffixQuery);
searchQuery.setLimit(10);
searchQuery.setTrackTotalCount(SearchQuery.TRACK_TOTAL_COUNT);

SearchRequest request = new SearchRequest(tableName, indexName, searchQuery);
SearchRequest.ColumnsToGet columnsToGet = new SearchRequest.ColumnsToGet();
columnsToGet.setReturnAll(true);
request.setColumnsToGet(columnsToGet);

SearchResponse response = client.search(request);
System.out.println(response.getTotalCount());
System.out.println(response.getRows());

计费说明

使用 VCU 模式(原预留模式)时,使用多元索引查询数据会消耗 VCU 的计算资源。使用 CU 模式(原按量模式)时,使用多元索引查询数据会消耗读吞吐量。更多信息,请参见多元索引计量计费。

常见问题

相关文档