elasticsearch-analysis-ansj icon indicating copy to clipboard operation
elasticsearch-analysis-ansj copied to clipboard

2.4.5版本中flush/dic接口奇怪现象

Open cuimo4183 opened this issue 4 years ago • 9 comments

你好,我在定位问题时发现,本项目提供的刷新辞典接口flush/dic很奇怪,大致描述如下:

1,先调用flush接口,后ES进行查询,此时的结果时正常的 2,在调用flush/dic之前(新词未生效),ES进行了一次该词的搜索(结果肯定“错误”),flush使新词生效,后面的ES搜索,结果时好时坏(单节点环境,指定主分片) 3,如果在步骤2中的flush之前,进行过10次左右的搜索,接着flush使新词生效,后面的ES搜索,结果都是新词之前的“错误”结果

感觉像是ES基于搜索有内部的缓存,由于ES还没有了解到这么深,想在这里得到大佬们的支持,谢谢。

cuimo4183 avatar Jul 01 '21 23:07 cuimo4183

补充,我调用_cache/clear接口也位解决此问题

cuimo4183 avatar Jul 02 '21 00:07 cuimo4183

是的,analyzer会被放在ThreadLocal里。

热更新问题,在这里修复了:#193

shi-yuan avatar Jul 02 '21 01:07 shi-yuan

是的,analyzer会被放在ThreadLocal里。

热更新问题,在这里修复了:#193

谢谢,感谢回复,由于线上ES不方便升级大版本,我准备研究下能否采取其他手段进行解决

cuimo4183 avatar Jul 08 '21 00:07 cuimo4183

可以的,如果需要,这边可以对2.x版本升级 其实插件本身改动不大,核心是nlp-lang的改动

shi-yuan avatar Jul 08 '21 01:07 shi-yuan

可以的,如果需要,这边可以对2.x版本升级 其实插件本身改动不大,核心是nlp-lang的改动

你好,我看nlp包中加了volatile关键词,照葫芦画瓢也在我这边低版本改了,然后我在analysis-ansj中的两个类也照着改了。启动没问题,不过没有生效,还是间歇性生效,不知道还有哪里的修改点。

cuimo4183 avatar Jul 26 '21 08:07 cuimo4183

可以的,如果需要,这边可以对2.x版本升级 其实插件本身改动不大,核心是nlp-lang的改动

你好,我看nlp包中加了volatile关键词,照葫芦画瓢也在我这边低版本改了,然后我在analysis-ansj中的两个类也照着改了。启动没问题,不过没有生效,还是间歇性生效,不知道还有哪里的修改点。

也没有找到threadlocal 的相关修改点

cuimo4183 avatar Jul 26 '21 08:07 cuimo4183

ThreadLocal只能是注册的全局的,能控制。如果不是,es注册的是CustomAnalyzer,控制不了的。

所以只能控制,ThreadLocal的value引用,也就是词典

而且词典不能从ENV里移除,如果有变更,只能先clear,再重新加载,如果删除了,clear掉就行

shi-yuan avatar Jul 26 '21 11:07 shi-yuan

ThreadLocal只能是注册的全局的,能控制。如果不是,es注册的是CustomAnalyzer,控制不了的。

所以只能控制,ThreadLocal的value引用,也就是词典

而且词典不能从ENV里移除,如果有变更,只能先clear,再重新加载,如果删除了,clear掉就行

我看你的代码变动好像是把原来的reload 改成reloadLIbrary方法判断分支,执行reload或者是clear,我没理解到怎么就解决bug了

cuimo4183 avatar Jul 26 '21 11:07 cuimo4183

reload内部,会先clear,clear执行的时候,会重新初始化branches

......
public class SmartForest<T> implements Comparable<SmartForest<T>>, Serializable {
    ......
    public void clear() {
        this.branches = new SmartForest[65536];
    }
   ......
}

之后再重新读取并加载词典,把词条放入branches

shi-yuan avatar Jul 27 '21 01:07 shi-yuan