为Text类型的字段设置分词类型后,系统会将可分词类型的内容根据设定的分词类型分成多个词。非Text类型的字段不能设置分词类型。

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

分词类型

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

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

单字分词(SingleWord)

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

设置分词类型为单字分词后,具体的分词方式如下:
  • 汉语会按照“字”切分。例如“杭州”会切分成“杭”和“州”,通过MatchQuery或MatchPhraseQuery查询“杭”可以查询到含有“杭州”内容的数据。
  • 英文字母或数字会按照空格或标点符号切分,然后转换为小写。例如“Hang Zhou”会切分成“hang”和“zhou”,通过MatchQuery或MatchPhraseQuery查询“hang”或“HANG”或“Hang”都能查询到该行数据。
  • 对于数字和英文字母连接在一起的词,例如商品型号等,也会按照空格或标点符号切分,但是数字和英文不会拆分开。例如“IPhone6”会拆分成“IPhone6”,通过MatchQuery或MatchPhraseQuery查询时,只能指定完整“iphone6”才能查询到,使用“iphone”查询不到。
单字分词的参数说明请参见下表。
参数 说明
caseSensitive 是否大小写敏感。默认是false,此时所有英文字母会转换为小写。

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

delimitWord 对于英文和数字连接在一起的单词,是否分割英文和数字。默认是false。

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

分隔符分词(Split)

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

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

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

分隔符分词的参数说明请参见下表。
参数 说明
delimiter 分隔符,默认是空白字符,可以自定义分隔符。
  • 创建多元索引时,字段分词配置中的分隔符必须和写入数据时的分隔符保持一致,否则可能会查询不到数据。
  • 当自定义的分隔符为特殊字符井号(#)、波浪线(~)等时,字段分词配置中的分隔符请使用转义字符\表示,例如\#

最小数量语义分词(MinWord)

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

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

最大数量语义分词(MaxWord)

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

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

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

模糊分词(Fuzzy)

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

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

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

模糊分词会将内容全部转换为小写存储,因此查询时大小写不敏感,类似于SQL中的like。

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

  • 限制
    • 当Text字段的分词类型为模糊分词时,长度不能超过1024字符。如果超过长度限制,系统会将超过的字符截断丢弃,只保留前1024个字符。
    • 为了防止索引数据量过度膨胀,最大和最小字符切分单元的差值(maxChars-minChars)不能超过6。
  • 参数
    参数 说明
    minChars 最小字符切分单元,即切分的字符组合中字符数量必须大于等于此值,默认值为1。
    maxChars 最大字符切分单元,即切分的字符组合中字符数量必须小于等于此值,默认值为7。

分词类型对比

从几个关键维度对不同分词的比较信息请参见下表。
对比项 单字分词 分隔符分词 最小数量语义分词 最大数量语义分词 模糊分词
索引膨胀
相关性影响 较强 较强
适用语言 所有 所有 汉语 汉语 所有
长度限制 1024字符
召回率

示例

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

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

  • 字段值为“中华人民共和国-国歌”,使用各类型分词器后索引的切词效果。
    类型 参数 索引时分词
    单字分词(SingleWord) 默认 “中”,“华”,“人”,“民”,“共”,“和”,“国”,“歌”
    分隔符分词(Split) delimiter: "-" “中华人民共和国”,“国歌”
    最小数量语义分词(MinWord) 默认 “中华人民共和国”,“国歌”
    最大数据量语义分词(MaxWord) 默认 “中华人民共和国”,“中华人民”,“中华”,“华人”,“人民共和国”,“人民”,“共和国”,“共和”,“国”,“国歌”
    模糊分词(Fuzzy) minChars:1, maxChars:3 “中”,“中华”,“中华人”,“华”,“华人”,“华人民”,“人”,“人民”,“人民共”,“民”,“民共”,“民共和”,“共”,“共和”,“共和国”,“和”,“和国”,“国”,“国歌”,“歌”
  • 字段值为“中华人民共和国-国歌”,使用各类型分词器后查询的切词效果。
    类型 参数 查询时分词
    单字分词(SingleWord) 默认 “中”,“华”,“人”,“民”,“共”,“和”,“国”,“歌”
    分隔符分词(Split) delimiter: "-" “中华人民共和国”,“国歌”
    最小数量语义分词(MinWord) 默认 “中华人民共和国”,“国歌”
    最大数据量语义分词(MaxWord) 默认 “中华人民共和国”,“中华人民”,“中华”,“华人”,“人民共和国”,“人民”,“共和国”,“共和”,“国”,“国歌”
    模糊分词(Fuzzy) 默认(minChars:1, maxChars:7) “中华人民共和国”,“国歌”