没有合适的资源?快使用搜索试试~ 我知道了~
ElasticSearch 重写IK分词器源码设置mysql热词更新词库1
需积分: 0 9 下载量 15 浏览量
2022-08-08
17:54:49
上传
评论
收藏 315KB DOCX 举报
温馨提示
试读
12页
0.常用热词词库的配置方式0.1 采用IK 内置词库优点:部署方便,不用额外指定其他词库位置缺点:分词单一化,不能指定想分词的词条0.2 IK 外置静态词库优点
资源推荐
资源详情
资源评论
0.常用热词词库的配置方式
0.1 采用 IK 内置词库
优点:部署方便,不用额外指定其他词库位置
缺点:分词单一化,不能指定想分词的词条
0.2 IK 外置静态词库
优点:部署相对方便,可以通过编辑指定文件分词文件得到想要的词条
缺点:需要指定外部静态文件,每次需要手动编辑整个分词文件,然后放到指定的文件目录
下,重启 ES 后才能生效
0.3 IK 远程词库
优点:通过指定一个静态文件代理服务器来设置 IK 分词的词库信息
缺点:需要手动编辑整个分词文件来进行词条的添加, IK 源码中判断头信息 Last-Modified
ETag 标识来判断是否更新,有时不生效
结合上面的优缺点,决定采用 Mysql 作为外置热词词库,定时更新热词 和 停用词。
本文以 Elasticsearch 7.3.2 版本为例.
1.下载源码
1.1 下载 IK
下载合适的 ElasticSearch 对应版本的 IK 分词器:https://github.com/medcl/elasticsearch-
analysis-ik/archive/v7.3.2.zip
1.2 配置文件说明
我们来查看它 config 文件夹下的文件:
分析 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"></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>
ext_dict:对应的扩展热词词典的位置,多个热词文件之间使用分号来进行间隔
ext_stopwords:对应扩展停用词词典位置,多个之间用分号进行间隔
remote_ext_dict:远程扩展热词位置 如:https://xxx.xxx.xxx.xxx/ext_hot.txt
remote_ext_stopwords:远程扩展停用词位置 如:https://xxx.xxx.xxx.xxx/ext_stop.txt
2. 修改源码
2.1 Pom 修改
在 pom 文件中, 修改<elasticsearch.version>7.3.2</elasticsearch.version>的依赖与使用
的 es 版本调整一致, 默认下载的源码中为 7.0.0, 需要进行修改, 否则部署到服务器
上, 加载 IK 插件时会报错
2.2 类修改
org.wltea.analyzer.dic.Dictionary 单例类的初始化方法 initial,在这里需要创建一个我们
自定义的线程,并且启动它:
如下 第 20 行所示
1. /**
2. * 词典初始化 由于 IK Analyzer 的词典采用 Dictionary 类的静态方法进行词典初始化
3. * 只有当 Dictionary 类被实际调用时,才会开始载入词典, 这将延长首次分词操作的
时间 该方法提供了一个在应用加载阶段就初始化字典的手段
4. *
5. * @return Dictionary
6. */
7. public static synchronized void initial(Configuration cfg) {
8. if (singleton == null) {
9. synchronized (Dictionary.class) {
10. if (singleton == null) {
11.
12. singleton = new Dictionary(cfg);
13. singleton.loadMainDict();
14. singleton.loadSurnameDict();
15. singleton.loadQuantifierDict();
16. singleton.loadSuffixDict();
17. singleton.loadPrepDict();
18. singleton.loadStopWordDict();
剩余11页未读,继续阅读
资源评论
蟹蛛
- 粉丝: 20
- 资源: 323
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功