infinilabs / analysis-ik

🚌 The IK Analysis plugin integrates Lucene IK analyzer into Elasticsearch and OpenSearch, support customized dictionary.
Apache License 2.0
16.48k stars 3.27k forks source link

增加单字成词的属性 #1075

Open gwisdomroof opened 2 weeks ago

gwisdomroof commented 2 weeks ago

Problem description

ik_smart/ik_max_word在分词时,如果命中了词语,则不会进一步拆分单字,例如:“唐诗三百首”,采用ik_max_word分词结果为:["唐诗三百首", "唐诗三百", "唐诗", "三百", "首"] 这样的问题在于:如果我只是输入“诗”字,则这篇文档不会被命中。

Preferred solution

  1. ik_smart/ik_max_word新增一个属性splitWord2Char,如果为true,就会将词语拆分成单字。默认为false,以便跟现有的行为一致。 对ik_max_word而言,“唐诗三百首”的拆分结果将是:["唐诗三百首", "唐诗三百", "唐诗", "三百", "唐", "诗", "三", "百", "首"]

  2. 新增一个ik_char的分词器,将文本拆分成单字。“唐诗三百首”的拆分结果将是:["唐", "诗", "三", "百", "首"] 这个分词器的目的,主要是解决es本身不能处理Surrogate Pair的宽字节字符,而ik分词器目前能处理,而且对中文分词有很好的支持。

gwisdomroof commented 2 weeks ago

https://github.com/infinilabs/analysis-ik/pull/854 这个pr提供了一个ik_max_word_char的分词器,实际就是ik_max_word的splitWord2Char为true的情况。