Hello,World

ES搜索快有一部分原因是因为在内存中就已经可以进行搜索了,先对搜索文档进行分词,并在倒排索引中进行搜索,是先在内存中进行查找搜索吗,内存没有的话去哪里进行查找呢,是磁盘吗,请大神指点。

Elasticsearch | 作者 laohan | 发布于2020年11月09日 | 阅读数:1336

ES搜索快有一部分原因是因为在文件系统缓存中(此时在内存中)就已经可以进行搜索了,我想知道更具体的流程,比如说我想搜索“中文社区”,会对其进行分词为“中文”,“社区”,并在倒排索引中进行搜索,是在内存中进行查找搜索吗,内存中的倒排索引,如果内存中没有的话,去哪里进行查找呢,毕竟会进行持久化操作,如果是磁盘的话,速度不会降低嘛,对这个流程感到一些疑惑,请大神指点。
已邀请:

zmc - ES PAAS、JuiceFS

赞同来自: laohan

首先需要明确ES进程的一个大致结构:

es11111.png

 
1.请求先经过内存中的倒排索引结构(FST)
2.再根据FST查找的结构找到具体的磁盘位置,然后去磁盘中拿原始数据
 
如果再倒排索引结构中没有找到,流程就结束了。
 
补充一个细节图:(将图中字典树结构替换成FST结构即可,lucene4之后修改的)
es22222.png

JiangJibo - 喊我雷锋

赞同来自:

ES用mmap形式把磁盘文件映射到虚拟内存里,当检索的数据不再内存中触发缺页异常,要从磁盘加载的,所以速度会降低的。这就要求你在设置jvm堆时不要设置过大,充足的系统缓存时ES高效运行的关键之一

pony_maggie - 公众号:犀牛饲养员的技术笔记

赞同来自:

堆外内存的主要作用不是你说的,而是做查询结果的缓存。数据还都是在磁盘的

zmc - ES PAAS、JuiceFS

赞同来自:

JiangJibo - 喊我雷锋

赞同来自:

_0开头的所有文件构成一个segment

guoyanbiao520

赞同来自:

所以说要保证查询的效率最好就是能有足够的内存缓存所有的段文件是么

要回复问题请先登录注册