多元索引支持三种字符串类型:Keyword、FuzzyKeyword 和 Text。根据查询需求选择合适的类型。
背景信息
表格存储数据表中的字符串使用 String 类型存储,相当于 C++、Java 等语言中的 String 类型。多元索引在此基础上进一步细分,以支持不同的查询模式:
|
类型 |
适用场景 |
|
Keyword |
精确查询、范围查询、排序和统计聚合 |
|
FuzzyKeyword |
任意数据规模下的高性能通配符查询、前缀查询和后缀查询 |
|
Text |
支持分词化的全文查询,以及相关性评分 |
表中和多元索引中类型映射
数据表中的 String 类型可直接在多元索引中映射为 Keyword、FuzzyKeyword 或 Text 类型。通过虚拟列功能,您还可以将数据表中的 Integer 或 Double 类型映射为这三种字符串类型。
|
表中数据类型 |
方式 |
多元索引中数据类型 |
|
String |
直接使用 |
Keyword |
|
FuzzyKeyword |
||
|
Text |
||
|
Integer |
虚拟列 |
Keyword |
|
FuzzyKeyword |
||
|
Text |
||
|
Double |
虚拟列 |
Keyword |
|
FuzzyKeyword |
||
|
Text |
类型介绍
Keyword
Keyword 将字符串视为不可分割的整体存储,类似关系型数据库中的字符串类型,是最常用的字符串类型。支持精确查询、多词精确查询、范围查询、通配符查询、前缀查询、存在性查询(空值查询),以及排序和统计聚合(含 GroupBy)。
典型应用场景:用户 ID、状态码、邮件地址、国家代码等需要精确匹配或聚合分析的字段。
在百万级以上数据集中,通配符查询和前缀查询的性能会随数据规模增大而下降。如需在大规模数据上执行高性能模糊查询,使用 FuzzyKeyword 类型。
Text
Text 专为全文查询设计。写入时,系统按配置的分词方式将字符串拆分为词语后分别建索引;查询时,查询词同样先分词再匹配。
正因为 Text 对词语而非原始值建索引,它支持相关性评分、摘要高亮、匹配查询和短语匹配查询,但不支持精确查询、排序和统计聚合。
典型应用场景:商品描述、文章正文、用户评论等需要按词语搜索的长文本字段。
分词方式的更多信息,请参见分词。
FuzzyKeyword
FuzzyKeyword 专为高性能模糊查询设计。写入时,系统将每个字段值的子串预先存储在索引中,查询时直接扫描紧凑的索引结构而非逐行遍历原始数据。因此,通配符查询、前缀查询和后缀查询的性能不会随数据规模增大而下降。
典型应用场景:日志消息、文件路径、商品 SKU 等用户通过部分字符串进行搜索的字段。
后缀查询直接使用 FuzzyKeyword 类型的 SuffixQuery。也可以将数据翻转后对 Keyword 类型使用 PrefixQuery,但性能较弱。
FuzzyKeyword 类型的字段不支持排序和统计聚合。如需同时排序或聚合,通过虚拟列将该字段额外映射为 Keyword 类型。
如果一个字段需要同时使用多种查询功能(例如精确查询、高性能模糊查询和全文查询),通过虚拟列将数据表的一列在多元索引中分别映射为 Keyword、Text 和 FuzzyKeyword 类型。更多信息,请参见虚拟列。
类型区别
三种字符串类型在支持的查询功能和最大长度上有所差异,详见下表。
"✓"表示支持,"×"表示不支持。
|
功能 |
Keyword |
FuzzyKeyword |
Text |
|
✓ |
× |
× |
|
|
✓ |
× |
× |
|
|
✓ |
× |
× |
|
|
✓ |
✓ |
✓ |
|
|
✓ |
× |
× |
|
|
✓ |
× |
× |
|
|
× |
× |
✓ |
|
|
全文查询:相关性评分 |
× |
× |
✓ |
|
全文查询:摘要高亮 |
× |
× |
✓ |
|
× |
× |
✓ |
|
|
× |
× |
✓ |
|
|
✓(大规模时性能较差) |
✓(性能优) |
× |
|
|
✓(大规模时性能较差) |
✓(性能优) |
× |
|
|
后缀查询 |
× |
✓ |
× |
|
最大长度 |
4 KB |
2 KB |
2 MB |