分词

Text类型的字段设置分词类型后,系统会根据设定的分词类型将可分词的内容分成多个词。非Text类型的字段不能设置分词类型。TEXT类型的字段不支持排序和统计聚合。如果Text类型的字段同时需要进行排序或统计聚合,可以通过虚拟列为Keyword类型实现。

背景信息

对于Text类型字段,常用于匹配查询(MatchQuery)和短语匹配查询(MatchPhraseQuery),少部分场景也会用到精确查询(TermQuery)、多词精确查询(TermsQuery)、前缀查询(PrefixQuery)、通配符查询(WildcardQuery)等。

分词类型

目前支持单字分词、分隔符分词、最小数量语义分词、最大数量语义分词和模糊分词5种分词类型。

所有分词类型都可以应用于模糊查询场景,具体如何选择请参见详解TableStore模糊查询

单字分词(SingleWord)

单字分词适用于汉语、英语、日语等所有语言文字。Text类型字段的默认分词类型为单字分词。

设置分词类型为单字分词后,具体的分词方式如下:

  • 汉语会按照“字”切分。例如“杭州”会切分成“杭”和“州”,通过MatchQueryMatchPhraseQuery查询“杭”可以查询到含有“杭州”内容的数据。

  • 英文字母或数字会按照空格或标点符号切分。

    • caseSensitivefalse时,不区分大小写,表格存储会将分词后的英文字母全部转换为小写字母进行存储。

      例如“Hang Zhou”会切分成“hang”和“zhou”,通过MatchQueryMatchPhraseQuery查询“hang”或“HANG”或“Hang”都能查询到该行数据。

    • caseSensitivetrue时,区分大小写,表格存储会将分词后的英文字母区分大小写进行存储。

      例如“Hang Zhou”会切分成“Hang”和“Zhou”,通过MatchQueryMatchPhraseQuery查询“Hang”或“Zhou”都能查询到该行数据。

  • 对于数字和英文字母连接在一起的词,例如商品型号等,也会按照空格或标点符号切分,但是默认情况下数字和英文不会拆分开。例如“iphone6”会拆分成“iphone6”,通过MatchQueryMatchPhraseQuery查询时,只有指定完整“iphone6”才能查询到,使用“iphone”查询不到。

    如果需要将数字和英文拆分开,您可以设置delimitWord参数为true。此时“iphone6”会拆分成“iphone”和“6”,通过MatchQueryMatchPhraseQuery查询“iphone”和“6”都能查询到该行数据。

单字分词的参数说明请参见下表。

参数

说明

caseSensitive

是否大小写敏感。默认值是false,此时所有英文字母会转换为小写。

如果不需要系统自动将英文字母转换为小写字母,需要保持大小写敏感,可以设置caseSensitivetrue。

delimitWord

对于英文和数字连接在一起的单词,是否分割英文和数字。默认值是false,表示数字和英文不会拆分开。

如果需要将数字和英文拆分开,您可以设置delimitWord参数为true,此时“iphone6”会被拆分成“iphone”和“6”。

分隔符分词(Split)

表格存储提供了基于通用词典的分词,但是有些特殊行业需要一些自定义的辞典做分词,为了解决此问题,表格存储提供了分隔符分词,也叫做自定义分词,用户先按照自己的方式分词,再按照特定的分隔符进行分隔后写入表格存储。

分隔符分词适用于汉语、英语、日语等所有语言文字。

Text类型字段配置了分隔符分词后,会按照分隔符delimiter指定值切分字段值。例如字段值为“羽毛球,乒乓球,说唱”,分隔符delimeter为英文逗号(,),则会切分为“羽毛球”、“乒乓球”和“说唱”并建立索引,通过MatchQueryMatchPhraseQuery查询“羽毛球”、“乒乓球”、“说唱”或“羽毛球,乒乓球”均可以查询到该行数据。

分隔符分词的参数说明请参见下表。

参数

说明

caseSensitive

是否大小写敏感。默认是false,此时所有英文字母会转换为小写。

如果不需要系统自动将英文字母转换为小写字母,需要保持大小写敏感,可以设置caseSensitivetrue。

重要

从表格存储Java SDK5.17.2版本开始支持此配置。

delimiter

分隔符,默认是空白字符,可以自定义分隔符。

  • 创建多元索引时,字段分词配置中的分隔符必须和写入数据时的分隔符保持一致,否则可能会查询不到数据。

  • 当自定义的分隔符为特殊字符井号(#)、波浪线(~)等时,字段分词配置中的分隔符请使用转义字符\表示,例如\#

最小数量语义分词(MinWord)

最小数量语义分词适用于汉语,一般应用于全文检索场景。

设置分词类型为最小数量语义分词后,系统按照语义对Text字段内容分词时,会将Text字段内容切分成最小数量的语义词。例如“梨花茶”会切分成“梨”和“花茶”,切分后的结果没有重合。再例如“中华人民共和国”会被切分成“中华人民共和国”。

最大数量语义分词(MaxWord)

最大数量语义分词适用于汉语,一般应用于全文检索场景。

设置分词类型为最大数量语义分词后,系统会尽量多的分出语义词,不同语义词之间会有重叠,总长度累加后会大于原文长度,索引大小也会膨胀。例如“梨花茶”会切分成“梨花”和“花茶”,切分后的结果没有重合。再例如“中华人民共和国”会被切分成“中华人民共和国”、“中华人民”、“中华”、“华人”、“人民共和国”、“人民”、“共和国”、“共和”和“国”。

此种分词类型的分词后结果更多,查询时命中的概率更大,但是索引大小会有比较大的膨胀。适合使用MatchQuery而非MatchPhraseQuery查询,如果使用MatchPhraseQuery查询,由于查询关键词中也会按照同样的方式分词,那么位置信息会重叠,就有可能导致搜索不到。

模糊分词(Fuzzy)

模糊分词适用于汉语、英语、日语等所有语言文字,一般应用于文本内容较短场景,例如标题、电影名称、书名、文件名、目录名等。

模糊分词可用于以很低的延迟返回结果,比WildcardQuery性能更好,但是索引大小会有一定膨胀。

设置分词类型为模糊分词后,系统对文本内容进行Ngram分词,结果介于minCharsmaxChars之间。例如用在下拉提示等功能中。

重要

要实现模糊查询时,您必须在进行模糊分词的列上使用MatchPhraseQuery,而不能使用其他Query。如果对该列有多种查询需求,请使用虚拟列功能。关于虚拟列的具体操作,请参见虚拟列

  • 限制

    • Text字段的分词类型为模糊分词时,长度不能超过1024字符。如果超过长度限制,系统会将超过的字符截断丢弃,只保留前1024个字符。

    • 为了防止索引数据量过度膨胀,最大和最小字符切分单元的差值(maxChars-minChars)不能超过15。

  • 参数

    参数

    说明

    minChars

    最小字符切分单元,即切分的字符组合中字符数量必须大于等于此值,默认值为1。

    maxChars

    最大字符切分单元,即切分的字符组合中字符数量必须小于等于此值,默认值为7。

    caseSensitive

    是否大小写敏感。默认是false,此时所有英文字母会转换为小写。

    如果不需要系统自动将英文字母转换为小写字母,需要保持大小写敏感,可以设置caseSensitivetrue。

    重要

    从表格存储Java SDK5.17.2版本开始支持此配置。

分词类型对比

从几个关键维度对不同分词的比较信息请参见下表。

对比项

单字分词

分隔符分词

最小数量语义分词

最大数量语义分词

模糊分词

索引膨胀

相关性影响

较强

较强

适用语言

所有

所有

汉语

汉语

所有

长度限制

1024字符

召回率

示例

通过如下示例查看各种分词器在索引时和查询时的分词效果。

索引时,分词字符串的值会被切分并建立索引;查询时,查询关键词也被切分,并尝试匹配之前建立的索引。

  • 字段值为“中华人民共和国-国歌”,使用各类型分词器后索引的切词效果。

    类型

    参数

    索引时分词

    单字分词(SingleWord)

    默认

    “中”,“华”,“人”,“民”,“共”,“和”,“国”,“歌”

    分隔符分词(Split)

    delimiter: "-"

    “中华人民共和国”,“国歌”

    最小数量语义分词(MinWord)

    默认

    “中华人民共和国”,“国歌”

    最大数据量语义分词(MaxWord)

    默认

    “中华人民共和国”,“中华人民”,“中华”,“华人”,“人民共和国”,“人民”,“共和国”,“共和”,“国”,“国歌”

    模糊分词(Fuzzy)

    minChars:1, maxChars:3

    “中”,“中华”,“中华人”,“华”,“华人”,“华人民”,“人”,“人民”,“人民共”,“民”,“民共”,“民共和”,“共”,“共和”,“共和国”,“和”,“和国”,“国”,“国歌”,“歌”

  • 字段值为“中华人民共和国-国歌”,使用各类型分词器后查询的切词效果。

    类型

    参数

    查询时分词

    单字分词(SingleWord)

    默认

    “中”,“华”,“人”,“民”,“共”,“和”,“国”,“歌”

    分隔符分词(Split)

    delimiter: "-"

    “中华人民共和国”,“国歌”

    最小数量语义分词(MinWord)

    默认

    “中华人民共和国”,“国歌”

    最大数据量语义分词(MaxWord)

    默认

    “中华人民共和国”,“中华人民”,“中华”,“华人”,“人民共和国”,“人民”,“共和国”,“共和”,“国”,“国歌”

    模糊分词(Fuzzy)

    默认(minChars:1, maxChars:7)

    “中华人民共和国”,“国歌”