怎么又是你

es关于更新和缓存的疑问?

Elasticsearch | 作者 yqbboy | 发布于2021年06月30日 | 阅读数:2112

1. 假设一个位于非堆内存的segment File中有10000条document,现在发起请求,仅修改其中的一条document的数据,那么segment File缓存会增量更新吗?还是说直接新增一份segment File,对旧文件缓存进行全量替换呢?
2. Shard Request Cache中,怎样配置才能缓存搜索结果呢?
已邀请:

zhangdadadapao

赞同来自: yqbboy

1.修改其中的一条document的数据且refresh后,会新增一份segment File(其实是一组段文件,就是一个新的段),新的段里只记录增量的信息;旧文件只有在merge后才可能被变更(删除)。
2.这块我不太懂,你可以参考一下张超大佬的博客 (博客链接我没法贴,私信发你了)

Charele - Cisco4321

赞同来自: yqbboy

1
ES里面(或者说Lucene里面)没有“增量更新”这一说,
 
拿你的例子来说,你把原来段(不妨叫段0)里面的一个文档里的“aaa"改成"bbb",
 
它会在段0上做个标记(就是加文件),标记这个文档已删除。
然后在新段1里添加数据"bbb"。
 
此时aaa仍然在段0里面,你查询的时候是查不到的,因为收集器做了过滤。
 
在mege的时候,它会把段0里的所有文档(除了那个"aaa")和段1里的"bbb"一起形成一个新段2
(当然,并不是在发生merge的时候,就肯定会这么做,取决于ES的merge策略。不过大致上你可以这么认为)

QQ图片20210701131707.png

 
红色里面的,你可以看成是“删除标记文件”
(.dvd,dvm文件,这是由于索引开启软删除的缘故,如果关闭软删除,可能是别的文件名)
 
2
ES是自动开启“缓存搜索结果”的,除非你显式的关闭它。
当然,也不会所有的都缓存,其中有一个很明显的规则就是要打分的不会缓存,,,
 
 

要回复问题请先登录注册