多元索引提供了分词能力,如果字段类型为Text类型,那么这个字段可以额外设置一个分词参数,指定这个字段按照哪一种方式分词。非Text类型不能设置分词类型。

对于Text类型数据,一般常用于MatchQuery和MatchPhraseQuery查询,少部分场景也会用到TermQuery、TermsQuery、PrefixQuery、WildcardQuery等。

类型

目前支持的分词类型如下。

  • 单字分词
    • 名称:single_word
    • 适用于:汉语、英语、日语等所有语言文字
    • 参数:
      • caseSensitive:是否大小写敏感。默认是false,此时所有英文字母会转换为小写。
      • delimitWord:对于英文和数字连接在一起的单词,是否分割英文和数字。默认是false。

    当设置字段分词类型为单字分词后,汉语会按照“字”切分,例如“杭州”会切分成“杭”和“州”,通过MatchQuery或MatchPhraseQuery查询“杭”可以查询到含有“杭州”内容的数据。

    英文字母或数字会按照空格或标点符号切分,然后转换为小写,例如“Hang Zhou”会切分成“hang”和“zhou”,通过MatchQuery或MatchPhraseQuery查询“hang”或“HANG”或“Hang”都能查询到该行数据。如果不需要系统自动将英文字母转换为小写字母,需要保持大小写敏感,那么可以设置参数caseSensitive为true。

    对于数字和英文字母连接在一起的词,例如商品型号等,也会按照空格或标点符号切分,结果就是数字英文不会拆分开,例如“IPhone6”会拆分成“IPhone6”,通过MatchQuery或MatchPhraseQuery查询时,只能指定完整“iphone6”才能查询到,使用“iphone”查询不到。如果需要将英文和数字拆分开,可以设置参数delimitWord为true,这样“iphone6”会被拆分成“iphone”和“6”。

  • 分隔符分词
    • 名称:split
    • 适用于:汉语、英语、日语等所有语言文字
    • 参数:

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

    表格存储提供了基于通用词典的分词,但是有些特殊行业需要一些自定义的辞典做分词,这时候产品提供的分词类型就无法满足用户需求了。

    为了解决这个问题,表格存储提供了分隔符分词,也叫自定义法分词,用户自己先按照自己的方式分词后,然后按照特定分隔符分割后写入表格存储。

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

    说明 创建多元索引时,该字段分词配置中的分隔符必须和写入数据中的分隔符保持一致,否则可能会查询不到数据。
  • 最小数量语义分词
    • 名称:min_word
    • 适用于:汉语
    • 参数:无

    除了提供字级别的分词外,多元索引还提供语义级别分词,其中最基础的语义分词是最小语义分词,按照语义对Text字段内容分词时,会切分成最小数量的语义词。

    例如“梨花茶”会切分成“梨”和“花茶”,切分后的结果没有重合。再例如“中华人民共和国”会被切分成“中华人民共和国”。

    一般情况下,全文检索场景中这种分词就可以满足基本需求。

  • 最大数量语义分词
    • 名称:max_word
    • 适用于:汉语
    • 参数: 无

    除了最小数量语义分词外,还提供一种更复杂的最大数量语义分词,会尽量多的分出语义词,不同语义词之间会有重叠,总长度累加后会大于原文长度,索引大小也会膨胀。

    例如“梨花茶”会切分成“梨花”和“花茶”,切分后的结果没有重合。再例如“中华人民共和国”会被切分成“中华人民共和国”、“中华人民”、“中华”、“华人”、“人民共和国”、“人民”、“共和国”、“共和”和“国”。

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

  • 模糊分词
    • 名称:fuzzy
    • 适用于:汉语、英语、日语等各种语言
    • 参数:
      • minChars:最小字符切分单元,也就是切分的字符组合中字符数量必须大于等于这个数,默认为1,建议取值2。
      • maxChars:最大字符切分单元,也就是切分的字符组合中字符数量必须小于等于这个数,默认为3。
    • 限制:
      • Text字段长度不超过32字符,如果超过会将限制之外的字符截断丢弃,只保留前32个字符。
      • 为了防止索引数据量过度膨胀,最大和最小字符切分单元差值(maxChars - minChars)不得超过6。

    有一种场景是文本内容较短,例如标题、电影名称、书名等,但是需要非常快速的查询到结果。例如用在下拉提示等功能中,针对这种需求,多元索引提供了模糊分词,对文本内容进行Ngram分词,结果介于minChars和maxChars之间。

    模糊分词可用以很低的延迟返回结果,但索引膨胀会很大,所以适用于短文本,不适用于长文本。

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

分词类型对比

下面从几个关键维度对不同分词做一个比较。
对比项 单字分词 分隔符分词 最小数量语义分词 最大数量语义分词 模糊分词
索引膨胀 巨大
相关性影响 较强 较强
适用语言 所有 所有 汉语 汉语 所有
长度限制 32
召回率

示例

您可以通过以下示例观察各种分词器在索引时和查询时的分词效果。索引时,分词字符串的值会被切分并建立索引;查询时,查询关键词也被切分,并尝试匹配之前建立的索引。

  • 字段值为“中华人民共和国-国歌”,使用各类型分词器后索引的切词效果。
    类型 参数 索引时分词
    单字分词(SingleWord) 默认 “中”,“华”,“人”,“民”,“共”,“和”,“国”,“歌”
    分隔符分词(Split) delimiter: "-" “中华人民共和国”,“国歌”
    最小数量语义分词(MinWord) 默认 “中华人民共和国”,“国歌”
    最大数据量语义分词(MaxWord) 默认 “中华人民共和国”,“中华人民”,“中华”,“华人”,“人民共和国”,“人民”,“共和国”,“共和”,“国”,“国歌”
    模糊分词(Fuzzy) 默认(minChars:1, maxChars:3) “中”,“中华”,“中华人”,“华”,“华人”,“华人民”,“人”,“人民”,“人民共”,“民”,“民共”,“民共和”,“共”,“共和”,“共和国”,“和”,“和国”,“国”,“国歌”,“歌”
  • 字段值为“中华人民共和国-国歌”,使用各类型分词器后查询的切词效果。
    类型 参数 索引时分词
    单字分词(SingleWord) 默认 “中”,“华”,“人”,“民”,“共”,“和”,“国”,“歌”
    分隔符分词(Split) delimiter: "-" “中华人民共和国”,“国歌”
    最小数量语义分词(MinWord) 默认 “中华人民共和国”,“国歌”
    最大数据量语义分词(MaxWord) 默认 “中华人民共和国”,“中华人民”,“中华”,“华人”,“人民共和国”,“人民”,“共和国”,“共和”,“国”,“国歌”
    模糊分词(Fuzzy) 默认(minChars:1, maxChars:3) “中华人民共和国”,“国歌”
说明
  • 对于模糊分词(Fuzzy)器,索引时先按空白或标点符号拆开,再按“最大(小)字符切分单元”切分;查询时会按空白或标点符号拆开,不会再按“最大(小)字符切分单元”切分。
  • 对于其他分词器,索引和查询时使用一致的分词规则。