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