你的浏览器禁用了JavaScript, 请开启后刷新浏览器获得更好的体验!
输入关键字进行搜索
搜索:
没有找到相关结果
Charele - Cisco4321
赞同来自:
要回复问题请先登录或注册
Cisco4321
3 个回复
Charele - Cisco4321
赞同来自:
当你执行refresh操作时(手动或自动),
它是外部刷新器来执行,但外部的并不自己做事,叫内部的去刷新。
内部的请求发到Lucene,(文档有变化)Lucene会生成一个新的NRT Reader,
这个新生成的dr会同时赋给dr1, dr2。
(红线所标的流程)
你的查询用的就是外部刷新器里的dr1, 所以你就可以查询到新的结果了。
但如果你执行的是flush操作呢,也会和上面一样的操作。
只是最新结果只返回给dr2, 并不返回给dr1。
(蓝线所标)
所以当你的索引是"refresh_interval": -1,
你插入文档时并执行flush后,你是看不到结果的。
其实ES已经取得了最新结果,赋给了dr2,但并没有赋给dr1。所以你是查不到数据的
以前看到有个道友说他ES6执行flush后能看到结果,
我想怎么可能。特地下载了一个ES6看了一下,
的确是的,老版里面只有一个刷新器(不分内外)
Charele - Cisco4321
赞同来自:
这是ES flush操作的代码,红色的是正事,
归档日志,进行Lucene提交啥的。
蓝色的,顺带用内部刷新器刷新了一下。
这些ES的流程并不复杂,很容易理解。
下面说说,当你refresh时,里面发生了什么。
理解上认为,refresh = Lucene flush
但refresh跟显示去调用Lucene的flush()方法还是有区别的,并不能相等
Charele - Cisco4321
赞同来自:
抛开那些无关紧要的代码,你会来到这个,这个getReader()方法,
就是ES refresh执行的实质所在,它生成一个最新的NRT reader给ES.
首先一个问题是这两个参数applyAllDeletes, writeAllDeletes究竟是什么意思,
apply所有删除?写所有删除?
当你用ES时,它固定的是 (true, false)
除了不能是(false, true)(下面会报错)
那如果我是其它组合,(true, true),或者(false, false)对于结果会有什么不一样吗?