设为首页 收藏本站
查看: 1006|回复: 0

[经验分享] ElasticSearch的ik分词插件开发

[复制链接]

尚未签到

发表于 2017-5-20 12:40:50 | 显示全部楼层 |阅读模式
 ik插件,说白了,就是通过封装ik分词器,与ElasticSearch对接,让ElasticSearch能够驱动该分词器。那么,具体怎么与ElasticSearch对接呢?从下往上走,总共3步:
一、封装IK分析器
    与ElasticSearch集成,分词器的配置均从ElasticSearch的配置文件读取,因此,需要重载IKAnalyzer的构造方法,然后继承ElasticSearch的类AbstractIndexAnalyzerProvider。代码如下:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class IkAnalyzerProvider extends AbstractIndexAnalyzerProvider<IKAnalyzer> {
    private final IKAnalyzer analyzer;
 
    @Inject
    public IkAnalyzerProvider(Index index, @IndexSettings Settings indexSettings, 
             Environment env, @Assisted String name, @Assisted Settings settings) {
        super(index, indexSettings, name, settings);
        Dictionary.initial(new Configuration(env));
        analyzer=new IKAnalyzer(indexSettings, settings, env);
    }
 
    @Override public IKAnalyzer get() {
        return this.analyzer;
    }
}



    由于词库的配置也是从ElasticSearch的配置文件中读取,因此Dictionary也需要重载初始化方法。以上代码实现了一个分词策略供应器,这个供应器主要提供IK分析器。接下来,需要把这个供应器与ElasticSearch进行绑定。
二、绑定IK分析器
    分析器的绑定需要继承绑定处理器AnalysisModule.AnalysisBinderProcessor,代码如下:  
?
1
2
3
4
5
6
7
8
public class IkAnalysisBinderProcessor extends AnalysisModule.AnalysisBinderProcessor {
 
    @Override public void processAnalyzers(AnalyzersBindings analyzersBindings) {
        analyzersBindings.processAnalyzer("ik", IkAnalyzerProvider.class);
        super.processAnalyzers(analyzersBindings);
    }
 
}



   现在绑定处理器已经实现,下面是如何是IK分析器成为ElasticSearch的插件。
三、与ElasticSearch插件关联
    继承AbstractPlugin,定义一个插件名称,方便在ElasticSearch配置文件里指定插件使用,定义一个简单的插件描述。,然后将ik绑定处理器加入ElasticSearch的分析模块。  
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class AnalysisIkPlugin extends AbstractPlugin {
 
    @Override public String name() {
        return "analysis-ik";
    }
 
 
    @Override public String description() {
        return "ik analysis";
    }
 
 
    @Override public void processModule(Module module) {
        if (module instanceof AnalysisModule) {
            AnalysisModule analysisModule = (AnalysisModule) module;
            analysisModule.addProcessor(new IkAnalysisBinderProcessor());
        }
    }
}



    以上只是与ElasticSearch对接的处理,之后还有一些IK的类需要调整,比如IKAnalyzer的构造方法需要重载,Dictionary的初始化方法也需要重载,Configuration的构造方法也需要重载等等,这些类根据不同的情况,构造重载实现也不一样。
 
http://my.oschina.net/xiaohui249/blog/268907

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-379348-1-1.html 上篇帖子: elasticsearch filter bitset 下篇帖子: elasticsearch的实现全文检索
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表