前缀查询(PrefixQuery)用于查找多元索引中字段值以指定字符串开头的数据行。
功能概述
PrefixQuery 根据指定的前缀值匹配列中的数据。查询行为取决于列的数据类型:
-
Keyword:基础字符串类型。随着数据规模增大,查询性能会持续下降,仅适合小规模数据集。
-
FuzzyKeyword:专为前缀查询等模糊查询优化的数据类型。无论数据规模大小,查询性能均保持稳定。适用于大多数前缀查询场景。
-
Text:列值在建立索引前会经过分词处理。当分词结果中至少有一个词条满足前缀条件时,该行被命中。由于分词存在不确定性,前缀查询结果不可预测,仅为兼容性支持,请谨慎使用。
如何选择数据类型
下表汇总了各数据类型在前缀查询场景下的适用性:
|
数据类型 |
前缀查询性能 |
是否推荐 |
|
Keyword |
随数据规模下降 |
仅限小规模数据集 |
|
FuzzyKeyword |
数据规模不影响性能 |
推荐,适用于大多数场景 |
|
Text |
分词导致结果不可预测 |
不推荐 |
前缀匹配示例
假设某列中存储以下值:hangzhou、beijing、shanghai、harbin
-
前缀
hang:匹配hangzhou,不匹配beijing、shanghai、harbin -
前缀
ha:同时匹配hangzhou和harbin
接口
前缀查询的接口为Search或者ParallelScan,具体的 Query 类型为PrefixQuery。
参数
|
参数 |
说明 |
|
query |
查询类型,设置为 PrefixQuery。 |
|
fieldName |
目标列的名称。 |
|
prefix |
前缀值,用于与列值进行匹配。 对于 Text 类型列,匹配前会先对列值分词,分词结果中至少有一个词条满足前缀条件即视为命中。 |
|
getTotalCount |
是否返回匹配的总行数。默认值为 false,即不返回。 设置为 true 会增加查询延迟。 |
|
weight |
查询权重,正浮点数。用于全文检索场景中调整该列对 BM25 相关性得分的贡献,值越大,该列对排名的影响越大。 此参数不影响返回的结果集,只影响结果中各行的 BM25 得分。 |
|
tableName |
数据表名称。 |
|
indexName |
多元索引名称。 |
|
columnsToGet |
指定返回的列,通过 returnAll 和 columns 配置。 returnAll 默认为 false。未设置 columns 时,仅返回主键列;设置 columns 后,仅返回指定列。 将 returnAll 设置为 true 时,返回所有列。 |
使用方式
支持通过控制台、命令行工具或SDK执行前缀查询。执行前,请完成以下准备工作。
基于 FuzzyKeyword 类型的 PrefixQuery 目前仅支持通过表格存储SDK实现,控制台和命令行工具仅支持 Keyword 类型。
使用阿里云账号或者具有表格存储操作权限的 RAM 用户进行操作。如果需要为 RAM 用户授权表格存储操作权限,请参见通过RAM Policy为RAM用户授权进行配置。
使用 SDK 方式和命令行工具方式进行操作时,如果当前无可用 AccessKey,则需要为阿里云账号或者 RAM 用户创建 AccessKey。
已创建数据表。
已为数据表创建多元索引。
使用 SDK 方式进行操作时,还需要完成初始化Tablestore Client。
使用命令行工具方式进行操作前,还需要完成下载并启动命令行工具,然后配置接入实例信息并选择要操作的表。具体操作,请参见下载命令行工具、启动并配置接入信息和数据表操作。
计费说明
使用 VCU 模式(原预留模式)时,使用多元索引查询数据会消耗 VCU 的计算资源。使用 CU 模式(原按量模式)时,使用多元索引查询数据会消耗读吞吐量。更多信息,请参见多元索引计量计费。