zoukankan      html  css  js  c++  java
  • 32.修改IK分词器源码来基于mysql热更新词库

    主要知识点,

    • 修改IK分词器源码来基于mysql热更新词库

       

    一、IK增加新词的原因

    在第32小节中学习到了直接在es的词库中增加词语,来扩充自已的词库,但是这样做有以下缺点:

    1)每次添加完,都要重启es才能生效,非常麻烦

    2es是分布式的,可能有数百个节点,你不能每次都一个一个节点上面去修改

    这一小节来学习让es不停机,直接在外部mysql中添加新的词语,es中立即热加载到这些新词语。

       

    目前业界的热更新的方案:

    1)修改ik分词器源码,然后手动支持从mysql中每隔一定时间,自动加载新的词库

    2)基于ik分词器原生支持的热更新方案,部署一个web服务器,提供一个http接口,通过modifiedtag两个http响应头,来提供词语的热更新

    常用第一种方案,因为第二种方案很不稳定,ik官方社区都建议第二种方案

       

    二、修改IK分词器源码步骤

    1、下载源码

       

    https://github.com/medcl/elasticsearch-analysis-ik/tree/v5.2.0

       

    ik分词器,是个标准的java maven工程,直接导入eclipse就可以看到源码

       

    2、修改源码

    我目前主要学习Python,对Java不是很了解,所以以下的都没有完成。

    Dictionary类,169行:Dictionary单例类的初始化方法,在这里需要创建一个我们自定义的线程,并且启动它

    HotDictReloadThread类:就是死循环,不断调用Dictionary.getSingleton().reLoadMainDict(),去重新加载词典

    Dictionary类,389行:this.loadMySQLExtDict();

    Dictionary类,683行:this.loadMySQLStopwordDict();

       

    3mvn package打包代码

       

    target eleaseselasticsearch-analysis-ik-5.2.0.zip

       

    4、解压缩ik压缩包

       

    mysql驱动jar,放入ik的目录下

       

    5、修改jdbc相关配置

    关于mysql的配置,比方说连接地址,端口等。

       

    6、重启es

       

    观察日志,日志中就会显示我们打印的那些东西,比如加载了什么配置,加载了什么词语,什么停用词

       

    7、在mysql中添加词库与停用词

       

    8、分词实验,验证热更新生效

  • 相关阅读:
    Building a Space Station POJ
    Networking POJ
    POJ 1251 Jungle Roads
    CodeForces
    CodeForces
    kuangbin专题 专题一 简单搜索 POJ 1426 Find The Multiple
    The Preliminary Contest for ICPC Asia Shenyang 2019 F. Honk's pool
    The Preliminary Contest for ICPC Asia Shenyang 2019 H. Texas hold'em Poker
    The Preliminary Contest for ICPC Asia Xuzhou 2019 E. XKC's basketball team
    robotparser (File Formats) – Python 中文开发手册
  • 原文地址:https://www.cnblogs.com/liuqianli/p/8535765.html
Copyright © 2011-2022 走看看