码迷,mamicode.com
首页 > 其他好文 > 详细

ElasticSearch的ik分词插件开发

时间:2016-08-03 01:23:45      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:

ElasticSearch的ik分词插件开发
摘要
本文主要介绍如何开发ElasticSearch的ik分词插件。很多时候,网上开源的分词插件不能满足业务需求,只能自己定义开发一套ik分词,let‘s go!

    ik插件,说白了,就是通过封装ik分词器,与ElasticSearch对接,让ElasticSearch能够驱动该分词器。那么,具体怎么与ElasticSearch对接呢?从下往上走,总共3步:

一、封装IK分析器

    与ElasticSearch集成,分词器的配置均从ElasticSearch的配置文件读取,因此,需要重载IKAnalyzer的构造方法,然后继承ElasticSearch的类AbstractIndexAnalyzerProvider。代码如下:

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,代码如下:  

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的分析模块。  

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的构造方法也需要重载等等,这些类根据不同的情况,构造重载实现也不一样。

ElasticSearch的ik分词插件开发

标签:

原文地址:http://www.cnblogs.com/bmaker/p/5731297.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!