doc_values如何在ElasticSearch中工作

时间:2015-09-02 13:05:28

标签: elasticsearch

有人可以向我解释doc_values是如何工作的吗? 为什么在进行聚合时会帮助我?

过滤时会对我有帮助吗?

对于过滤,我看到它的方式,ElasticSearch将访问反向索引以找到"指针"对于所有适合聚合的文档,所以doc_values是一个"未反转的索引"根据文件,是无关紧要的?或者我错了吗?

当有人启用doc_values时,有人可以解释聚合的流程吗?什么时候启用doc_values,为什么启用它会节省内存?

感谢。

1 个答案:

答案 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将帮助您解决内存使用问题。