多元索引提供了分词能力,如果用户的字段类型设置为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:分隔符,默认是空白字符,可以自定义分隔符。

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

为了解决这个问题,我们提供了分隔符分词,也叫自定义法分词,用户自己先按照自己的方式分词后,然后按照特定分隔符分割后写入表格存储。
说明 创建多元索引时,该字段分词配置中的分隔符必须和写入数据中的分隔符保持一致,否则可能会查询不到数据。
最小数量语义分词
  • 名称:min_word
  • 适用于:汉语
  • 参数:

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

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

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

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

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

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

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

模糊分词
  • 名称:fuzzy
  • 适用于:汉语、英语、日语等各种语言
  • 参数:
    • minChars:最小字符切分单元,也就是切分的字符组合中字符数量必须大于等于这个数,建议取值2。
    • maxChars:最大字符切分单元,也就是切分的字符组合中字符数量必须小于等于这个数,建议取值不超过7。
  • 限制:
    • Text字段长度不超过32字符,如果超过会将限制之外的字符截断丢弃,只保留前32个字符。

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

优势是可以以很低的延迟返回结果,缺点是索引膨胀会很大,所以适用于短文本,不适用于长文本。

对比

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