有个人长的像洋葱,走着走着就哭了…….

elasticsearch refresh的疑问?

Elasticsearch | 作者 陈水鱼 | 发布于2022年12月19日 | 阅读数:2349

elasticsearch 默认为1s,文档中描述,当需要更快的indexing的时候,可以设置为-1,这个时候不会从内存commit索引。
这里有一个疑问,如果一值不refresh,数据是不是都会放在内存中,这样不会把内存撑爆吗?
还有个小问题,refresh = null 和refresh=-1,是不是一样的,看文档,null是重置,这里的意思是恢复默认值吗?
已邀请:

Charele - Cisco4321

赞同来自: 陈水鱼

首先说一点,
ES refresh ---> Lucene flush
ES flush ---> Lucene commit
(虽然不是完全相同,但大致可以这么认为)
 
1
如果一值不refresh,数据是不是都会放在内存中,这样不会把内存撑爆吗?
 
不会,Lucene中有设置(缺省16M), 超过这个值,就会自动flush(等于ES的refresh)
 
ES里面会重写设置这个值,内存的10%
QQ图片20221220002901.png

 
2
refresh = null 即恢复为缺省值null
ES里面,代码里会判断,如果是null,会用1去代替,
所以如果不设置,效果就是1秒refresh一次。
 
(另外,"缺省的效果"1s,和你显式的设置为1s,效果还是有点不一样的,这个只有看代码才能理解)
 
refresh = -1,就是不在ES里自动执行refresh
 
 
 
 
 

God_lockin

赞同来自:

es 写入时会写translog,然后refresh是用来把translog的数据commit到索引里支持检索,同时把内存里的数据清掉。
你说的没错,一直写不做commit会把内存撑爆,但是es会自己做commit,即使你refresh = -1
 
refresh = ? 控制的是刷新的间隔,-1 是不定时刷新而是到达一定的阈值之后自己刷。
 
refresh = null 是把你后设的配置清掉 ,恢复1s(默认值)这样

要回复问题请先登录注册