有人可以向我解释 doc_values 是如何工作的吗?为什么这对我进行聚合时有帮助?
过滤时对我有帮助吗?
对于过滤,在我看来,ElasticSearch 将访问倒排索引以查找指向适合聚合的所有文档的“指针”,因此 doc_values(根据文档,它是一个“非倒排索引”)是无关紧要的吗?还是我错了?
有人可以解释一下启用 doc_values 时和未启用时聚合的流程,以及为什么启用它可以节省内存吗?
谢谢。
关于以下的一般陈述doc_values:
doc_values将有助于堆内存的使用fielddatafielddata在排序、聚合、使用访问字段值的脚本、使用父子关系和地理距离过滤器时使用在doc_values发挥作用之前, fielddata 被加载到堆中。doc_values不会使用堆,而是使用堆外的内存——文件系统缓存,因为doc_values会驻留在文件系统中。Lucene将访问文件系统,操作系统将其缓存在文件系统缓存中,然后从那里处理请求。
为什么这很重要:堆的大小有限,建议堆大小不要超过 30 GB。堆还包含其他部分:过滤器缓存、查询缓存、索引缓冲区、段文件中的元数据等。Fielddata 通常占用大量空间,不是因为效率低下,而是因为 ES 需要加载所有将文档存入内存,以便对其进行排序、聚合。对于较大的索引(隐式地,分片),这意味着大量的数据。
这就是doc_values引入的原因:将所有这些负担从堆(这是有限的)转移到操作系统文件系统缓存(这也是有限的,但肯定会减少压力)。
doc_values它本身不会帮助您进行聚合。doc_values表示字段数据。Fielddata 对于聚合是必需的。doc_values将帮助您处理堆内存的使用。
| 归档时间: |
|
| 查看次数: |
1925 次 |
| 最近记录: |