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

时间: 2024-10-13 04:47:21

ElasticSearch的ik分词插件开发的相关文章

ElasticSearch 用ik分词器建立索引(java API)

ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.Elasticsearch是用Java开发的,作为当前流行的企业级搜索引擎,用于云计算中,能够达到实时搜索,并且具有稳定,可靠,快速安装,使用方便等多种优点,得到大多数企业的青睐. ElasicSearch可以通过终端建立索引,但是本人在做项目的时候用终端建立的索引,然后使用Java API进行数据的插入,始终得不到分词,最终的解决办法就是通过Java API

ElasticSearch安装ik分词插件

一.IK简介 IK Analyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包.最初,它是以开源项目Luence为应用主体的,结合词典分词和文法分析算法的中文分词组件.从3.0版本开 始,IK发展为面向Java的公用分词组件,独立于Lucene项目,同时提供了对Lucene的默认优化实现.在2012版本中,IK实现了简单的分词 歧义排除算法,标志着IK分词器从单纯的词典分词向模拟语义分词衍化. 二.安装IK分词插件 1.获取分词的依赖包 通过git clone https://g

Elasticsearch 集成IK分词器

我个人最喜欢使用IK分词,确实很方便,并且更新也快,这里做个简单介绍吧 分词插件IK 插件安装 1. 下载https://github.com/medcl/elasticsearch-analysis-ik 2. 解压进入目录执行"mvn clean package",生成target目录. 3. 解压后将config/ik目录复制到你的elasticsearch主目录的config目录下 4. 编辑config/elasticsearch.yml,在文件末尾添加下面内容(不能有tab

elasticsearch安装ik分词器(极速版)

简介:下面讲有我已经打包并且编辑过的zip包,你可以在下面下载即可. 1.下载zip包.elasticsearch-analysis-ik-1.8.0.jar下面有附件链接[ik-安装包.zip],下载即可.(内有做好的elasticsearch-analysis-ik-1.8.0.jar) 2.上传zip包.下载ik.zip文件后解压缩,如下图. 修改plugin-descriptor.properties文件,将elasticsearch.version=2.2.0改成自己的elastics

elasticsearch 拼音+ik分词,spring data elasticsearch 拼音分词

elasticsearch 自定义分词器 安装拼音分词器.ik分词器 拼音分词器: https://github.com/medcl/elasticsearch-analysis-pinyin/releases ik分词器:https://github.com/medcl/elasticsearch-analysis-ik/releases 下载源码需要使用maven打包 下载构建好的压缩包解压后放直接在elasticsearch安装目录下 plugins文件夹下,可以重命名 1.在es中设置分

ElasticSearch、IK分词器、Head Master安装-----Windows

ElasticSearch安装运行前提条件:配置好Jdk Head-Master运行前提条件:node 一.下载 地址:https://www.elastic.co/cn/downloads/elasticsearch 历史版本:找到下面这句话 然后双击 Not the version you're looking for? View past releases. 二.IK分词器下载 地址:https://github.com/medcl/elasticsearch-analysis-ik/re

Laravel个人博客集成Elasticsearch和ik分词

在之前的博客中,写了一篇用laravel5.5和vue写的个人博客.GitHub地址为:https://github.com/Johnson19900110/phpJourney.最近有空,就想着把Elasticsearch集成了进来. 因为博主比较懒,在博客园写博客,所以个人博客就没有同步了,因此就用php的一个爬虫库 fabpot/goutte 把自己博客园文章爬到了自己博客上. 代码如下: <?php namespace App\Libraries; use App\Post; use G

centos6.7下安装mvn 、安装elasticsearch下ik分词

先说一下安装mvn步骤,如果已安装可以忽略: 在tmp目录下 1.建立mvn目录 mkdir mvn cd /tmp/mvn 2.下载 wget http://apache.fayea.com/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz 3.解压 tar –xvf apache-maven-3.3.9-bin.tar.gz 4.移动到统一目录下 mv apache-maven-3.3.9 /usr/local 5.设置环境

配置elasticsearch 以及ik分词

https://github.com/medcl/elasticsearch-analysis-ikhttps://www.elastic.co/downloads/past-releases/elasticsearch-2-3-2es:2.3.2ik:1.9.2一安装es:wget 'https://download.elastic.co/elasticsearch/release/org/elasticsearch/distribution/tar/elasticsearch/2.3.2/e