后缀查询

更新时间:
复制 MD 格式

使用 Tablestore Java SDK 的后缀查询可匹配 FuzzyKeyword 字段中以查询字符串结尾的完整字段值,并返回匹配行或匹配总行数。

前提条件

安装Tablestore Java SDK并初始化客户端。

说明

后缀查询需要使用 5.17.0 及以上版本的 Tablestore Java SDK。

功能说明

后缀查询用于匹配以查询字符串结尾的完整字段值。后缀查询仅支持 FuzzyKeyword 类型字段(字段说明请参见字符串类型),且匹配区分大小写。例如,字段值 order-H001 可以匹配后缀 H001,但不能匹配 h001

说明

FuzzyKeyword 类型字段不支持排序和统计聚合。同一查询需要排序或统计聚合时,使用其他支持相应功能的字段。

Keyword 类型字段不支持 SuffixQuery。如需实现等效的后缀匹配,可在写入数据时将字段值反转后写入用于检索的 Keyword 类型字段;查询时反转待匹配的后缀字符串,并对该字段执行前缀查询PrefixQuery)。

调用 search 方法时,将查询类型设置为 SuffixQuery,并通过 SearchQuery 配置返回数量、总行数统计和其他通用查询行为。

SearchResponse search(SearchRequest request)

以下示例查询 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());

参数说明

查询请求

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>

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

returnAll(可选)

boolean

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

returnAllFromIndex(可选)

boolean

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

返回值

search 方法返回 SearchResponse。核心字段如下。

名称

类型

说明

totalCount

long

匹配行数,通过 getTotalCount() 获取。返回值取决于 trackTotalCount 配置。

rows

List<Row>

本次查询返回的行数据,通过 getRows() 获取。返回数量不超过 limit

nextToken

byte[]

下一页凭证,通过 getNextToken() 获取。值不为 null 时,将其设置到下一次请求的 token 中继续读取。

isAllSuccess

boolean

是否已成功查询全部索引分区,通过 isAllSuccess() 获取。值为 false 时,返回的是部分结果,totalCount 可能小于实际匹配行数。