本文介绍字符串相关的三种类型Keyword、FuzzyKeyword和Text,以及如何在业务研发时选择合适的字符串类型。
背景信息
字符串是数据类系统中最常见的类型,基本在所有业务场景中均会使用到。在传统的关系型数据库中,字符串类型会被细分为定长、变长等多种不同的类型。
在表格存储中,字符串类型主要是String类型,类似于C++、Java等开发语言中的String类型。在多元索引中为了支持更丰富的功能,在功能层面对字符串做了进一步细分,字符串包括类似String的Keyword类型、用于模糊查询的FuzzyKeyword类型以及可以分词的用于全文检索的Text类型。
本文会介绍这三种不同字符串类型的关系、区别以及如何在业务场景中进行字符串类型选择。
表中和多元索引中类型映射
表中的字符串类型可直接在多元索引中映射为Keyword、FuzzyKeyword或Text类型。您也可以使用虚拟列功能将表中的Integer类型和Double类型在多元索引中映射为Keyword、FuzzyKeyword或Text类型。
表中数据类型 | 方式 | 多元索引中数据类型 |
String | 直接使用 | Keyword |
FuzzyKeyword | ||
Text | ||
Integer | 虚拟列 | Keyword |
FuzzyKeyword | ||
Text | ||
Double | 虚拟列 | Keyword |
FuzzyKeyword | ||
Text |
类型介绍
Keyword
Keyword类型类似于数据库中的字符串类型,也类似于C++、Java等开发语言中的String类型,是最常用的字符串类型。
在功能上,主要支持精确查询、范围查询、通配符查询、前缀查询、存在性查询(空值查询)、排序和 GroupBy等聚合操作。其中,通配符查询和前缀查询在中大规模数据集(百万以上)场景中的性能会随着数据规模的增长而下降。
在业务场景中,如果不需要使用模糊查询或全文检索功能,则可以使用Keyword类型。如果需要使用排序、统计聚合等功能,则需要使用Keyword类型。
Text
Text类型类似于搜索引擎中的文本类型,支持多种分词,即系统会先将字符串类型切分成多个连续的词语,然后按照不同的词语去存储,主要用于全文检索场景。
Text类型的分词包括了多种分词,有些分词是简单的按字或者按字符切分,有些是按照语义去切分,不同分词方式适用于不同的业务场景。更多信息,请参见分词。
在业务场景中,如果需要使用全文检索功能,则需要使用Text类型。
FuzzyKeyword
当前FuzzyKeyword类型处于邀测中,如果需要使用FuzzyKeyword类型,请提交工单或者加入钉钉群36165029092(表格存储技术交流群-3)联系我们进行开通。
FuzzyKeyword类型也是一种字符串类型,主要特点是支持高性能的通配符查询、前缀查询和后缀查询,在任意规模数据上均能保持比较好的查询性能,查询性能不会随着规模增大而下降。
在业务场景中,如果需要使用高性能(毫秒级)的通配符查询、前缀查询或后缀查询,则需要使用FuzzyKeyword类型。
如果需要使用后缀查询,则可以直接使用FuzzyKeyword类型的SuffixQuery,或者将数据翻转后使用性能较弱的Keyword类型的PrefixQuery。
如果在业务场景中某一个字段需要用到多种查询功能,例如既需要精确查询,又需要高性能模糊查询和全文检索,则可以使用虚拟列功能,将表中的一列在多元索引中映射为三列,这三列可以分别使用Keyword、Text和FuzzyKeyword类型。更多信息,请参见虚拟列。
类型区别
三种字符串类型可用于的查询功能和最大长度有差异,具体说明请参见下表。
“✔️”表示支持,“×”表示不支持。
功能 | Keyword | FuzzyKeword | Text |
✔️ | × | × | |
✔️ | × | × | |
✔️ | × | × | |
✔️ | × | × | |
✔️ | × | × | |
✔️ | × | × | |
× | × | ✔️ | |
全文检索:相关性分数 | × | × | ✔️ |
全文检索:高亮和摘要 | × | × | ✔️ |
× | × | ✔️ | |
× | × | ✔️ | |
✔️(性能差) | ✔️(性能优) | × | |
✔️(性能差) | ✔️(性能优) | × | |
后缀查询 | × | ✔️ | × |
最大长度 | 4 KB | 2 KB | 1 KB |