ElasticSearch的中文分词

一ElasticSearch安装中文分词器

1.1 gitclone https://github.com/medcl/elasticsearch-analysis-ik

1.2 gitcheckout tags/v5.2.0

1.3 mvnpackage

1.4将target/releases/elasticsearch-analysis-ik-5.2.0.zip拷贝到

ES/plugins/ik目录下

1.5 在ES/plugins/ik下对elasticsearch-analysis-ik-5.2.0.zip进行解压缩

1.6 重启ES

 

二 IK分词器的基础

2.1ik_max_word

会将文本做最细粒度的拆分

POST /ecommerce/_analyze

{

   "text":"深秋嫩绿的垂柳",

   "analyzer":"ik_max_word"

}

它会拆分成"深秋","嫩绿","垂柳","绿","垂","柳"

2.2ik_smart

会做最粗粒度的拆分

POST /ecommerce/_analyze

{

   "text":"深秋嫩绿的垂柳",

   "analyzer":"ik_smart"

}

"深秋","嫩绿","垂柳"

 

三 IK分词器的使用

3.1 首先建立映射

PUT/ecommerce

{

    "mappings": {

        "music":{

             "properties": {

                "brand": {

                  "type":"text",

                  "analyzer":"ik_max_word",

                  "fields": {

                     "keyword": {

                        "type":"keyword",

                        "ignore_above": 256

                     }

                  }

                },

                "desc": {

                  "type":"string",

                  "analyzer":"ik_max_word",

                  "fields": {

                     "keyword": {

                        "type":"keyword",

                       "ignore_above": 256

                     }

                  }

                },

                "sales":{

                      "type":"long"

                },

                "price":{

                      "type":"float"

                },

                "review":{

                      "type":"integer"

                },

                "color":{

                  "type":"string",

                  "analyzer":"ik_max_word",

                  "fields": {

                     "keyword": {

                        "type":"keyword",

                       "ignore_above": 256

                     }

                  }

                },

                "origin":{

                  "type":"string",

                  "analyzer":"ik_max_word",

                  "fields": {

                     "keyword": {

                        "type":"keyword",

                       "ignore_above": 256

                     }

                  }

                },

                "c_date":{

                  "type":"date"

                }   

          }

        }

    }

}

3.2 然后添加数据

PUT /ecommerce/music/1

{

    "brand":"雅马哈",

    "desc":"正品YAMAHA雅马哈F310  F600初学者入门男女学生民谣木吉他 41寸",

    "color":"红",

    "origin":"美国",

    "sales":1914,

    "price":799.00,

    "review":786,

   "c_date":"2015-12-21"

}

PUT /ecommerce/music/2

{

    "brand":"雅马哈",

    "desc":"雅马哈FG800单板民谣木吉他 FGX800C电箱吉他FG700S升级41/40寸",

    "color":"黄",

    "origin":"美国",

    "sales":102,

    "price":1590.00,

    "review":349,

   "c_date":"2016-09-12"

}

3.3 分词分析

POST /ecommerce/_analyze

{

    "text":"美德威MP2000X智能电钢琴88键重锤成人电子钢琴家用数码电钢专业",

   "analyzer":"ik_max_word"

}

3.4 查询数据

POST /ecommerce/music/_search

{

   "query":{

       "match": {

           "desc":"罗兰"

       }

   }

}

 

POST /ecommerce/music/_search

{

   "query":{

      "constant_score": {

         "filter": {

             "term":{

                "desc":"吉他"

             }

         }

      }

   }

}

 

四 配置IK

IK默认提供的很多分词,并不能满足我们所有的情况,不同公司,可能都有自己的数据,而且还有一些最近流行的一些新词也是没有。所以这就需要我们更新词库

我们首先需要进到IK的config目录,有一个IKAnalyzer.cfg.xml的配置文件

main.dic:ik原生内置的中文词库

quantifier.dic:放了一些单位相关的词

suffix.dic:放了一些后缀

surname.dic:中国的姓氏

stopword.dic:英文停用词

在custom目录下也放了些词库

ext_stopword.dic:扩展的停用词,我们可以用来添加中文停用词

 

五 IK词库的热更新

我们如果每次需要手动去更新词库,每次都要重启ElasticSearch,如果集群数量太多,比如几百台 怎么去弄,所以我们有必要再不重启ElasticSearch的情况下热更新

 

5.1热更新的方案

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

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

一般公司都会采用第一种,第二种官方都不建议,因为不稳定

核心思想就是不停的reload你想更新的词典文件,比如ext_stop.dic或者main.dic,然后读取数据库里面的配置更新。

5.2 热更新代码

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

莫言静好、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值