-
Notifications
You must be signed in to change notification settings - Fork 191
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
2.4.5版本中flush/dic接口奇怪现象 #198
Comments
补充,我调用_cache/clear接口也位解决此问题 |
是的,analyzer会被放在ThreadLocal里。 热更新问题,在这里修复了:#193 |
谢谢,感谢回复,由于线上ES不方便升级大版本,我准备研究下能否采取其他手段进行解决 |
可以的,如果需要,这边可以对2.x版本升级 |
你好,我看nlp包中加了volatile关键词,照葫芦画瓢也在我这边低版本改了,然后我在analysis-ansj中的两个类也照着改了。启动没问题,不过没有生效,还是间歇性生效,不知道还有哪里的修改点。 |
也没有找到threadlocal 的相关修改点 |
ThreadLocal只能是注册的全局的,能控制。如果不是,es注册的是CustomAnalyzer,控制不了的。 所以只能控制,ThreadLocal的value引用,也就是词典 而且词典不能从ENV里移除,如果有变更,只能先clear,再重新加载,如果删除了,clear掉就行 |
我看你的代码变动好像是把原来的reload 改成reloadLIbrary方法判断分支,执行reload或者是clear,我没理解到怎么就解决bug了 |
reload内部,会先clear,clear执行的时候,会重新初始化branches ......
public class SmartForest<T> implements Comparable<SmartForest<T>>, Serializable {
......
public void clear() {
this.branches = new SmartForest[65536];
}
......
} 之后再重新读取并加载词典,把词条放入branches |
你好,我在定位问题时发现,本项目提供的刷新辞典接口flush/dic很奇怪,大致描述如下:
1,先调用flush接口,后ES进行查询,此时的结果时正常的
2,在调用flush/dic之前(新词未生效),ES进行了一次该词的搜索(结果肯定“错误”),flush使新词生效,后面的ES搜索,结果时好时坏(单节点环境,指定主分片)
3,如果在步骤2中的flush之前,进行过10次左右的搜索,接着flush使新词生效,后面的ES搜索,结果都是新词之前的“错误”结果
感觉像是ES基于搜索有内部的缓存,由于ES还没有了解到这么深,想在这里得到大佬们的支持,谢谢。
The text was updated successfully, but these errors were encountered: