博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ElasticSearch的ik分词插件开发
阅读量:5954 次
发布时间:2019-06-19

本文共 2069 字,大约阅读时间需要 6 分钟。

hot3.png

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

一、封装IK分析器

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

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

转载于:https://my.oschina.net/xiaohui249/blog/268907

你可能感兴趣的文章
【Javascript第二重境界】序
查看>>
python-argparse使用
查看>>
PHP支付宝手机网站支付功能
查看>>
微信小程序css篇----flex模型
查看>>
【转载】IL指令集
查看>>
Linux 常用名利总结
查看>>
C#winform控制textbox输入只能为数字
查看>>
每天一道算法题(13)——使用递归颠倒栈
查看>>
一些Layout的坑
查看>>
hbase源码系列(八)从Snapshot恢复表
查看>>
Spring Boot学习总结(1)——Spring Boot入门
查看>>
tab控件的使用心得
查看>>
Windows下提升进程权限(转)
查看>>
Struts2标签实现for循环
查看>>
实验3 OpenGL几何变换
查看>>
Hibernate 入门 特性配置
查看>>
数据库中文乱码处理
查看>>
前端面试总结
查看>>
视频:网站建设-如何利用网络赚大钱2
查看>>
嵌入式Linux学习路线
查看>>