有人可以向我解释doc_values如何工作吗?
为什么进行汇总时对我有帮助?
过滤时对我有帮助吗?
对于过滤,按照我的观察方式,ElasticSearch将访问反向索引以找到适合聚合的所有文档的“指针”,因此doc_values(根据文档为“反向索引”)无关紧要吗?还是我错了?
有人可以解释启用doc_values时和不启用doc_values时的聚合流程,以及为什么启用它可以节省内存吗?
谢谢。
最佳答案
有关doc_values
的一般声明:
doc_values
将有助于堆内存使用fielddata
的存储部分在
fielddata
发挥作用之前,将字段数据加载到堆中。 doc_values
将不使用堆,而是使用堆外部的内存-文件系统缓存,因为doc_values
将存在于文件系统中。 Lucene将访问文件系统,操作系统将其缓存在文件系统缓存中,然后从那里服务请求。这为何如此重要:堆的大小有限,建议不要使用超过30ish GB的堆大小。堆还包含其他部分:过滤器高速缓存,查询高速缓存,索引缓冲区,段文件中的元数据等。通常,字段数据会占用很多空间,这不是因为效率低下,而是因为ES需要加载所有将文档存储到内存中,以便可以对其进行排序和汇总。对于较大的索引(隐式为碎片),这意味着大量数据。
这就是为什么要引入
doc_values
的原因:将所有这些负担从堆(有限的)转移到OS文件系统缓存(有限的缓存,当然也要减轻压力)。doc_values
本身对汇总没有帮助。 doc_values
表示字段数据。 字段数据对于聚合是必需的。 doc_values
将帮助您解决堆内存使用问题。
关于elasticsearch - doc_values如何在ElasticSearch中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32354006/