有人可以向我解释doc_values是如何工作的吗? 为什么在进行聚合时会帮助我?
过滤时会对我有帮助吗?
对于过滤,我看到它的方式,ElasticSearch将访问反向索引以找到"指针"对于所有适合聚合的文档,所以doc_values是一个"未反转的索引"根据文件,是无关紧要的?或者我错了吗?
当有人启用doc_values时,有人可以解释聚合的流程吗?什么时候启用doc_values,为什么启用它会节省内存?
感谢。
答案 0 :(得分:4)
关于doc_values
的一般性陈述:
doc_values
将有助于堆内存使用fielddata
fielddata
在排序,执行聚合时,使用访问字段值的脚本时,使用父子关系和地理距离过滤器时使用在doc_values
发挥作用之前,fielddata正被加载到堆中。 doc_values
不会使用堆,而是堆外的内存 - 文件系统缓存,因为doc_values
将存在于文件系统中。 Lucene将访问文件系统,操作系统将其缓存在文件系统缓存中,然后从那里提供请求。
为什么这很重要:堆的大小有限,建议堆大小不要超过30 GB。堆也包含其他部分:过滤缓存,查询缓存,索引缓冲区,段文件中的元数据等.Fielddata通常占用大量空间,因为它效率低,但是因为ES需要加载所有将文档存入内存,以便它可以对它们进行排序和聚合。对于较大的索引(隐式地,分片),这意味着大量数据。
这就是doc_values
被引入的原因:将所有这些负担从堆(有限)转移到OS文件系统缓存(这也是有限的,但绝对压力较小) )。
doc_values
它本身无法帮助您进行聚合。 doc_values
表示fielddata。 字段数据对于聚合是强制性的。 doc_values
将帮助您解决堆内存使用问题。