分词

更新时间:2024-11-08 10:06:31

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)

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

  • 本页导读 (1)
  • 背景信息
  • 分词类型
  • 单字分词(SingleWord)
  • 分隔符分词(Split)
  • 最小数量语义分词(MinWord)
  • 最大数量语义分词(MaxWord)
  • 模糊分词(Fuzzy)
  • 分词类型对比
  • 示例