Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Solr中修改自定义词典如何立即生效 #40

Open
yooopan opened this issue Sep 6, 2018 · 1 comment
Open

Solr中修改自定义词典如何立即生效 #40

yooopan opened this issue Sep 6, 2018 · 1 comment

Comments

@yooopan
Copy link

yooopan commented Sep 6, 2018

注意事项

请确认下列注意事项:

  • 我已仔细阅读下列文档,都没有找到答案:
  • 我已经通过Googleissue区检索功能搜索了我的问题,也没有找到答案。
  • 我明白开源社区是出于兴趣爱好聚集起来的自由社区,不承担任何责任或义务。我会礼貌发言,向每一个帮助我的人表示感谢。
  • [ x] 我在此括号内输入x打钩,代表上述事项确认完毕。

版本号

当前最新版本号是:1.6.8
我使用的版本是:1.6.8

我的问题

业务中对自定义词典的依赖比较强,比如一些行业的特殊词汇,已经解决了hanlp自定义词典在solr中的使用问题,现在遇到关于自定义词典如何立即生效的问题。问题描述如下:
首先,修改一个自定义词典,比如user_define.txt,这时候user_define.txt的修改时间大于CustomDictionary.txt.bin的修改时间,想把user_define.txt生效,需要以下步骤:
1.删除CustomDictionary.txt.bin,这时solr中缓存的有词典,调用hanlp的分词接口修改的词典文件也不会立即生效,只能手动删除CustomDictionary.txt.bin文件,然后reload core,重新调研hanlp的分词接口。

2.生成CustomDictionary.txt.bin文件的时间比较长(截图中生成一个29M的bin文件需要1分多钟),这样会影响当前core的使用。先缓存启动,当全部词典加载成功后,调用reload方法重新构建词典的方法也考虑过,但是bin的生成时间依然是一个瓶颈。

期望输出

  1. 修改自定义词典以后,如何缩短CustomDictionary.txt.bin文件的生成时间。

  2. 立即生效(重启solr或者reload core的时候让自定义词典生效)

  3. solr集群中有多个节点,尽量避免手工操作。

@hankcs
Copy link
Owner

hankcs commented Sep 8, 2018

感谢反馈,目前的自定义词典机制并不适合频繁地修改更新。具体到solr等应用场景,也没有考虑同步的问题。此处提供一些可行的解决方案:

  1. 缓存的目的是为了频繁地启动debug,而不是reload。所以你需要禁止HanLP生成缓存,此时大概花费数秒钟加载所有的txt。这可以通过修改com.hankcs.hanlp.dictionary.CustomDictionary#loadMainDictionary实现。新版本可能会加一个禁用缓存的开关。
  2. 我并没有时间去研究solr的机制,也许在reload core的时候会有一个通知?你需要在接受该通知的时候reload HanLP的词典。如果你对时效非常敏感,可能需要同时创建新的Segment对象,以免多线程不同步。
  3. 你可以将词典放到唯一的一台服务器,编写自己的IOAdapter,提供远程访问功能。

总之,由于人力有限,HanLP项目只能提供解决思路,而无法代替用户开发所有的功能,请见谅。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants