IK分词器

安装

elasticsearch-analysis-ik 官方项目地址:https://github.com/medcl/elasticsearch-analysis-ik/releases,选择适配当前elasticsearch的版本(ik版本号和elasticsearch一致)
分词器安装和调试 - 图1

  1. /elasticsearch/bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.1.0/elasticsearch-analysis-ik-7.1.0.zip
  1. wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.1.0/elasticsearch-analysis-ik-7.1.0.zip
  2. mkdir /elasticsearch/plugins/ik
  3. unzip elasticsearch-analysis-ik-7.1.0.zip -d /elasticsearch/plugins/ik

自定义分词

需要确定IK分词器的配置地址,不同的安装方式和版本可能不同,需要通过 elasticsearch 启动日志查看 IK 分词器的配置文件路径,查看方式如下:

  1. cat /elasticsearch/logs/elasticsearch.log

image.png

  1. vim /elasticsearch/config/analysis-ik/IKAnalyzer.cfg.xml
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
  3. <properties>
  4. <comment>IK Analyzer 扩展配置</comment>
  5. <!--用户可以在这里配置自己的扩展字典 -->
  6. <entry key="ext_dict">custom_dictionary.dic</entry>
  7. <!--用户可以在这里配置自己的扩展停止词字典-->
  8. <entry key="ext_stopwords"></entry>
  9. <!--用户可以在这里配置远程扩展字典 -->
  10. <!-- <entry key="remote_ext_dict">words_location</entry> -->
  11. <!--用户可以在这里配置远程扩展停止词字典-->
  12. <!-- <entry key="remote_ext_stopwords">words_location</entry> -->
  13. </properties>
  1. vim /elasticsearch/config/analysis-ik/custom_dictionary.dic
  1. 倍耐力
  2. 枫车电商

最后重启 elasticsearch,使得配置生效。通过 kibana 调试分词效果。
image.png

  1. POST goods/_analyze
  2. {
  3. "analyzer": "ik_smart",
  4. "text": "枫车电商倍耐力座垫重返帝国"
  5. }

配置热更新

新建一个 Nginx 站点,站点目录下放置自定义配置文件,允许通过域名远程访问下载该词典。
image.png

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
  3. <properties>
  4. <comment>IK Analyzer 扩展配置</comment>
  5. <!--用户可以在这里配置自己的扩展字典 -->
  6. <entry key="ext_dict">custom_dictionary.dic</entry>
  7. <!--用户可以在这里配置自己的扩展停止词字典-->
  8. <entry key="ext_stopwords"></entry>
  9. <!--用户可以在这里配置远程扩展字典 -->
  10. <entry key="remote_ext_dict">http://elasticsearch.com/custom_dictionary.dic</entry>
  11. <!--用户可以在这里配置远程扩展停止词字典-->
  12. <!-- <entry key="remote_ext_stopwords">words_location</entry> -->
  13. </properties>

PS:如果是本地部署的 Nginx ,记得在 elasticsearch 主机中添加 host 指向

  1. 127.0.1.1 centos centos
  2. 192.168.9.201 elasticsearch.com

image.png
最后重启 elasticsearch,使得配置生效。通过 kibana 调试分词效果。
image.png

HanLP 分词器

官方项目地址:https://www.hanlp.com/
github地址:https://github.com/KennFalcon/elasticsearch-analysis-hanlp

安装

  1. #安装插件
  2. /elasticsearch/bin/elasticsearch-plugin install https://github.com/KennFalcon/elasticsearch-analysis-hanlp/releases/download/v7.1.0/elasticsearch-analysis-hanlp-7.1.0.zip

版本不一致解决

image.png

  1. unzip elasticsearch-analysis-hanlp-master.zip
  2. cd cd elasticsearch-analysis-hanlp-master

image.png

  1. vim gradle.properties
  2. elasticsearchVersion = 7.10.2

下载部署 JDK 环境 https://www.oracle.com/java/technologies/downloads/#java8
image.png
以下省略……,待补充

  1. ./gradlew assemble

拼音分词器

elasticsearch-analysis-pinyin 官方项目地址:https://github.com/medcl/elasticsearch-analysis-pinyin/,选择适配当前elasticsearch的版本(pinyin版本号和elasticsearch一致)

安装

  1. /elasticsearch/bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-pinyin/releases/download/v7.1.0/elasticsearch-analysis-pinyin-7.1.0.zip

拼音分词器参数

参数 默认值 含义
keep_first_letter true 词语字首字母刘德华``ldh
keep_separate_first_letter false 仅开头首字母刘德华 l
limit_first_letter_length 16 分析结果的最大长度
keep_full_pinyin true 单字完整拼音刘德华 liu de hua
keep_joined_full_pinyin false 词语完整拼音刘德华 liudehua
keep_none_chinese true 结果保留非中文字母或者数字
keep_none_chinese_together true 将非中文字母保持在一起 DJ音乐家 DJyinyuejia
keep_none_chinese_in_first_letter true 首字母保留非中文字母 刘德华AT2016 ldhat2016
keep_none_chinese_in_joined_full_pinyin false 保留非中文字母加入完整拼音 刘德华2016 liudehua2016
none_chinese_pinyin_tokenize true 如果是拼音,则将非中文字母分成单独的拼音词liudehuaalibaba13zhuanghan``liu de``hua``a li``ba``ba``13``zhuang``han
必须开启 keep_none_chinesekeep_none_chinese_together
keep_original false 保留原始输入
lowercase true 小写非中文字母
trim_whitespace true 去除空格
remove_duplicated_term false 删除重复的术语
ignore_pinyin_offset true