你的浏览器禁用了JavaScript, 请开启后刷新浏览器获得更好的体验!
发现
分享
文章
活动
登录
橡皮、老虎皮、狮子皮哪一个最不好?
关于ES的refresh的一些认识2
Elasticsearch
| 作者
Charele
| 发布于2024年03月20日 | 阅读数:
2467
分享到:
QQ空间
新浪微博
微信
QQ好友
印象笔记
有道云笔记
首先上一个图(图搞得有点丑陋)
这就是ES里面的refresh机制的流程
没有找到相关结果
已邀请:
与内容相关的链接
提交
3 个回复
Charele
-
Cisco4321
赞同来自:
ES里面有两个刷新器,外部的和内部的
当你执行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)对于结果会有什么不一样吗?
要回复问题请先
登录
或
注册
发起人
Charele
Cisco4321
活动推荐
Aug
15
2025 Zabbix 中国峰会
上海
·
8-15 周五
·
报名中
Oct
17
第27届 GOPS 全球运维大会暨研运数智化技术峰会 · 上海站
上海
·
10-17 周五
·
报名中
相关问题
集群稳定性的一些问题(一定量数据后集群变得迟钝)
请问copy_to字段 和 mutil_fields哪种性能好一些呢?
elasticsearch 6.00怎么设置index.refresh_interval默认值
ES副本同步是在refresh之前还是之后?
执行refresh的时候会存盘吗?
为什么我的es那个docs只能容纳10000个,超过10000个会自动删掉一些
面对refresh_interval,ES 的更新机制应该期待怎么的行为?
【求助】添加es的默认mapping模板的一些字段,但是出现报错
关于ES安全的一些问题探讨
那么如果我想对一些无意义的字,如“大”,“中”,“小”这些词不做匹配,该怎么做?
java client 和 http restful 底层实现是一样的么?哪个更好一些呢
问题状态
最新活动:
2024-03-25 15:22
浏览:
2467
关注:
1
人
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)对于结果会有什么不一样吗?