中间件-ES-中文拼音多音字插件

需求背景:中文拼音多音字分词。例如:三一重工,默认拼音分词会解析成sanyizhonggong,但业务需要的是解析成:sanyizhonggong、sanyichonggong。

解决办法:

首先,查看了ES用的中文拼音插件elasticsearch-analysis-pinyin的github中的issue,是有人提出类似需求,但也没有合适的方案:https://github.com/medcl/elasticsearch-analysis-pinyin/issues

然后:百度了各方面资料,没有找到现成解决方案。但找到一个觉得相对靠谱的解决思路,

https://blog.csdn.net/huochen1994/article/details/88876230

解决方案:

1、分析当前ES是如何实现的中文拼音分词。

ES用的中文拼音插件是:elasticsearch-analysis-pinyin,它底层用的是nlp-lang来实现的自然语言分词。根据ES的版本从github上下载了对应版本的插件源代码,代码修改主要涉及到了:elasticsearch-analysis-pinyin-5.x、nlp-lang-1.7.8。

1)拼音分词插件AnalysisPinyinPlugin,它通过实现ES的org.elasticsearch.plugins.AnalysisPlugin、org.elasticsearch.plugins.Plugin,纳入了ES插件体系。如下图,其中“pinyin”就是默认拼音分词的实现。我的想法是仿照“pinyin”分词实现一个多音字的拼音分词,例如叫“multiple_by_pinyin”。这样如果需要使用多音字分词的话,在索引的settings时选择多音字的分词即可。而那些使用默认的pinyin分词的用户也不会受影响。

2、简单描述下实现

下图用类图描述下核心类的关系,可见PinyinTokenizerForMultiple是分词的核心:

在PinyinTokenizerForMultiple中使用了nlp-lang的Pinyin.java来实现中文分词,如下图:

3、测试效果

1)默认分词效果:

入参:

结果:

2)多音字分词效果

入参:同上,其中analyzer输入多音字分词插件。

结果:重分词成 chong、zhong

使用注意:不能支持大字段的多音字分词,限制在100个汉字以内。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值