其他
Elasticsearch 如何自定义扩展词库?
Elasticsearch 实战项目中势必会用到中文分词,而中文分词器的选型包含但不限于如下开源分词器:
IK 分词器
https://github.com/medcl/elasticsearch-analysis-ik
Ansj 分词器
https://github.com/NLPchina/elasticsearch-analysis-ansj
jieba 分词器
https://github.com/sing1ee/elasticsearch-jieba-plugin
清华大学 thulac 分词器
https://github.com/microbun/elasticsearch-thulac-plugin
icu 分词器
https://github.com/elastic/elasticsearch-analysis-icu
还有华为的未开源的:泊松分词器;阿里未开源的:达摩院定制的分词器。
但,不论选择何种分词器,尤其选型开源分词器,到头来都会遇到:已有词库词典数据无法满足定制化项目需求的情况。
那么,实战中如何解决词典扩展问题呢?本文给出实战思路。
1 认知前提
1.1 分词器选型
1.2 新扩充词典对历史索引数据无效
2、新词库从哪里来?
2.1 平时积累或算法团队提供的新词库
2.2 互联网开源词库
系统词库——输入法自带的词库,为您的输入提供基本的字词。 细胞词库——全部由网友来贡献。搜狗鼓励用户积极上传或编辑细胞词库,为中文输入的演变做出自己的贡献。
2.3 爬取特定领域词库
3 静态扩展词典
3.1 步骤 1:下载词库
3.2 步骤 2:将.scel 转为 txt 文本格式
3.3 步骤 3:将生成的文本文件去重
3.4 步骤 4:将生成待添加词库添加到 IK 配置文件中
./config/analysis-ik/IKAnalyzer.cfg.xml
3.5 步骤 5:重新启动 Elasticsearch 节点
4 动态扩展词典
4.1 步骤 1:下载 IK 插件源码
4.2 步骤 2:修改 IK 插件源码
jdbc:mysql://192.168.1.15:3306/sogou_ext?useSSL=false&serverTimezone=GMT
4.3 步骤 3:将修改后源码重新打包
4.4 步骤 4:原有插件包替换为新插件包
./plugins/analysis-ik/elasticsearch-analysis-ik-7.13.0.jar
将mysql驱动的jar包复制到系统java目录的jre/lib/ext文件夹中。 修改/jre/lib/security/java.policy文件在grant下添加如下两行代码:
permission java.lang.RuntimePermission createClassLoader;
permission java.lang.RuntimePermission getClassLoader;
4.5 步骤 5:重启 Elasticsearch 节点,以使新插件生效
5 小结
推荐
中国50%+Elastic认证工程师出自于此!