elasticsearch 过滤重复_Elasticsearch扩展IK分词器

背景:
Ik分词器支持默认分词器,可以扩展分词词典,但想扩展一个分词器类型就需要个性IK源码了,扩展后的分词器与原生分词器可混用,也可单独使用。
下面简单介绍下修改过程同大家分享共同学习。

过程:
1、克隆IK源码并测试IK插件
1)克隆地址:https://github.com/medcl/elasticsearch-analysis-ik
要根据你目前使用的es版本找到合适IK的版本,版本选择:

375ef5745b429c20100d54466c317ff6.png


2)这里面有个坑如你的ES是6.7.1,IK克隆的也是6.7.1当编译好后,发现报IK插件与ES版本不一至问题,
(报错代码:Caused by: java.lang.IllegalArgumentException: Plugin [analysis-ik] was built for Elasticsearch version 6.5.0 but version 6.7.1 is running)
这是因为IK6.7.1发布的ES版本为6.5.0,所以需要修改pom文件中的版本如下:

<elasticsearch.version>6.5.0</elasticsearch.version> 
修改为 
<elasticsearch.version>6.7.1</elasticsearch.version>

3)测试IK编译插件

加载项目后进行maven package 编译打包,解压target/releases/elasticsearch-analysis-ik-6.7.1.zip,修改文件名为IK,复制到es的home下的plugins文件夹中后启动ES,如无报错信息 使用_analyzer进行测试是否成功安装IK分词器。

2、修改源码扩展小区分词器

1)IK与ES是通过plugin.analysis.ik.AnaysisIkPlugin类的Map进行配合使用,那么请记住这块后面开发完分词要添加在这个地方给ES使用。

public class AnalysisIkPlugin extends Plugin implements AnalysisPlugin {

    public static String PLUGIN_NAME = "analysis-ik";

    @Override
    public Map<String, AnalysisModule.AnalysisProvider<TokenizerFactory>> getTokenizers() {
        Map<String, AnalysisModule.AnalysisProvider<TokenizerFactory>> extra = new HashMap<>();

        extra.put("ik_smart", IkTokenizerFactory::getIkSmartTokenizerFactory);
        extra.put("ik_max_word", IkTokenizerFactory::getIkTokenizerFactory);

2)扩展 IkAnalyzerProvider和IkTokenizerFactory

通过

extra.put(“ik_smart”, IkTokenizerFactory::getIkSmartTokenizerFactory);

extra.put(“ik_smart”, IkAnalyzerProvider::getIkSmartAnalyzerProvider);

为线索找出创建IKAnalyzer类IkAnalyzerProvider实现ES抽象类AbstractIndexAnalyzerProvider来创建IKAnalyzer分词器,这是一个lambda写法,把方法存储到map中使用时传入方法所需的参数,我们仿照这个方法创建自己的分词器就可以了。

public class IkAnalyzerProvider extends AbstractIndexAnalyzerProvider<IKAnalyzer> {
    private final IKAnalyzer analyzer;

    public IkAnalyzerProvider(IndexSettings indexSettings, Environment env, String name, Settings settings,boolean useSmart) {
        super(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值