美文网首页
二十五、ElasticSearch的IK分词安装和简单使用及自定

二十五、ElasticSearch的IK分词安装和简单使用及自定

作者: 书写只为分享 | 来源:发表于2019-12-03 00:41 被阅读0次

    1、在elasticsearch中安装ik中文分词器
    我这里使用GIT去下载,大家也可以网上去下载
    (1)git clone https://github.com/medcl/elasticsearch-analysis-ik
    (2)git checkout tags/v5.2.0
    (3)mvn package
    (4)将target/releases/elasticsearch-analysis-ik-5.2.0.zip拷贝到es/plugins/ik目录下
    (5)在es/plugins/ik下对elasticsearch-analysis-ik-5.2.0.zip进行解压缩
    (6)重启es

    2、ik分词器基础知识
    ik_max_word: 会将文本做最细粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,中华人民,中华,华人,人民共和国,人民,人,民,共和国,共和,和,国国,国歌”,会穷尽各种可能的组合;
    ik_smart: 会做最粗粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,国歌”。
    3、ik分词器的使用

    PUT /my_index 
    {
      "mappings": {
        "my_type": {
          "properties": {
            "text": {
              "type": "text",
              "analyzer": "ik_max_word"
            }
          }
        }
      }
    }
    
    POST /my_index/my_type/_bulk
    { "index": { "_id": "1"} }
    { "text": "男子偷上万元发红包求交女友 被抓获时仍然单身" }
    { "index": { "_id": "2"} }
    { "text": "16岁少女为结婚“变”22岁 7年后想离婚被法院拒绝" }
    { "index": { "_id": "3"} }
    { "text": "深圳女孩骑车逆行撞奔驰 遭索赔被吓哭(图)" }
    { "index": { "_id": "4"} }
    { "text": "女人对护肤品比对男票好?网友神怼" }
    { "index": { "_id": "5"} }
    { "text": "为什么国内的街道招牌用的都是红黄配?" }
    
    GET /my_index/my_type/_search 
    {
      "query": {
        "match": {
          "text": "16岁少女结婚好还是单身好?"
        }
      }
    }
    

    4、自定义分词库及相关介绍
    ik配置文件地址:es/plugins/ik/config目录
    IKAnalyzer.cfg.xml:用来配置自定义词库

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
    <properties>
        <comment>IK Analyzer 扩展配置</comment>
        <!--用户可以在这里配置自己的扩展字典 -->
        <entry key="ext_dict">custom/mydict.dic;custom/single_word_low_freq.dic</entry>
         <!--用户可以在这里配置自己的扩展停止词字典-->
        <entry key="ext_stopwords">custom/ext_stopword.dic</entry>
        <!--用户可以在这里配置远程扩展字典 -->
        <!-- <entry key="remote_ext_dict">words_location</entry> -->
        <!--用户可以在这里配置远程扩展停止词字典-->
        <!-- <entry key="remote_ext_stopwords">words_location</entry> -->
    </properties>
    

    在IK的目录下,会有很多分词文件,里面有ik原生内置的中文词库、单位相关、姓氏、停用词、城市相关、繁体字等相关词库进行分词,我们也可以在里面加入相关的分词和停用词。
    5、mysql实现热更新
    每次都是在es的扩展词典中,手动添加新词语,很坑
    (1)每次添加完,都要重启es才能生效,非常麻烦
    (2)es是分布式的,可能有数百个节点,你不能每次都一个一个节点上面去修改
    热更新的方案
    (1)修改ik分词器源码,然后手动支持从mysql中每隔一定时间,自动加载新的词库
    (2)基于ik分词器原生支持的热更新方案,部署一个web服务器,提供一个http接口,通过modified和tag两个http响应头,来提供词语的热更新
    Mysql实现方案:
    (1)、下载源码https://github.com/medcl/elasticsearch-analysis-ik/tree/v5.2.0

    图片1.png
    (2)、修改源码
    在Dictionary类的实例化方法中加入
    图片2.png
    HotDictReloadThrea类:就是死循环,不断调用Dictionary.getSingleton().reLoadMainDict(),去重新加载词典
    图片3.png
    Dictionary类加入一个自己写的方法去重新加载词典
    图片4.png
    Dictionary类的loadMainDict方法中加入一项去读取mysql中的表字典
    ![图片6.png](https://img.haomeiwen.com/i13523164/116c64936d128ccf.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    配置文件,这样以后就改一次配置文件
    图片7.png
    图片8.png
    通过MAVEN打包mvn package
    target\releases\elasticsearch-analysis-ik-5.2.0.zip
    解压缩ik压缩包
    将mysql驱动jar,放入ik的目录下(需要与安装的mysql版本一样)
    图片9.png
    重启ES,后续在表中加入词就可以了
    image.png
    验证
    image.png

    相关文章

      网友评论

          本文标题:二十五、ElasticSearch的IK分词安装和简单使用及自定

          本文链接:https://www.haomeiwen.com/subject/jnpqgctx.html