ElasticSearch的ik分詞插件開發

    ik插件,說白了,就是經過封裝ik分詞器,與ElasticSearch對接,讓ElasticSearch可以驅動該分詞器。那麼,具體怎麼與ElasticSearch對接呢?從下往上走,總共3步:java

1、封裝IK分析器ide

    與ElasticSearch集成,分詞器的配置均從ElasticSearch的配置文件讀取,所以,須要重載IKAnalyzer的構造方法,而後繼承ElasticSearch的類AbstractIndexAnalyzerProvider。代碼以下:this

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進行綁定。插件

2、綁定IK分析器code

    分析器的綁定須要繼承綁定處理器AnalysisModule.AnalysisBinderProcessor,代碼以下:  繼承

public class IkAnalysisBinderProcessor extends AnalysisModule.AnalysisBinderProcessor {

    @Override public void processAnalyzers(AnalyzersBindings analyzersBindings) {
        analyzersBindings.processAnalyzer("ik", IkAnalyzerProvider.class);
        super.processAnalyzers(analyzersBindings);
    }

}

   如今綁定處理器已經實現,下面是如何是IK分析器成爲ElasticSearch的插件。ip

3、與ElasticSearch插件關聯get

    繼承AbstractPlugin,定義一個插件名稱,方便在ElasticSearch配置文件裏指定插件使用,定義一個簡單的插件描述。,而後將ik綁定處理器加入ElasticSearch的分析模塊。  it

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的構造方法也須要重載等等,這些類根據不一樣的狀況,構造重載實現也不同。
io

相關文章
相關標籤/搜索