字符串类型

本文介绍字符串相关的三种类型Keyword、FuzzyKeywordText,以及如何在业务研发时选择合适的字符串类型。

背景信息

字符串是数据类系统中最常见的类型,基本在所有业务场景中均会使用到。在传统的关系型数据库中,字符串类型会被细分为定长、变长等多种不同的类型。

在表格存储中,字符串类型主要是String类型,类似于C++、Java等开发语言中的String类型。在多元索引中为了支持更丰富的功能,在功能层面对字符串做了进一步细分,字符串包括类似StringKeyword类型、用于模糊查询的FuzzyKeyword类型以及可以分词的用于全文检索的Text类型。

本文会介绍这三种不同字符串类型的关系、区别以及如何在业务场景中进行字符串类型选择。

表中和多元索引中类型映射

表中的字符串类型可直接在多元索引中映射为Keyword、FuzzyKeywordText类型。您也可以使用虚拟列功能将表中的Integer类型和Double类型在多元索引中映射为Keyword、FuzzyKeywordText类型。

表中数据类型

方式

多元索引中数据类型

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、TextFuzzyKeyword类型。更多信息,请参见虚拟列

类型区别

三种字符串类型可用于的查询功能和最大长度有差异,具体说明请参见下表。

说明

“✔️”表示支持,“×”表示不支持。

功能

Keyword

FuzzyKeword

Text

精确查询

✔️

×

×

多词精确查询

✔️

×

×

范围查询

✔️

×

×

列存在性查询(空值查询)

✔️

×

×

排序

✔️

×

×

统计聚合

✔️

×

×

全文检索:分词

×

×

✔️

全文检索:相关性分数

×

×

✔️

全文检索:高亮和摘要

×

×

✔️

全文检索:匹配查询

×

×

✔️

全文检索:短语匹配查询

×

×

✔️

通配符查询

✔️(性能差)

✔️(性能优)

×

前缀查询

✔️(性能差)

✔️(性能优)

×

后缀查询

×

✔️

×

最大长度

4 KB

2 KB

1 KB