elasticsearch - doc_values如何在ElasticSearch中工作

标签 elasticsearch

有人可以向我解释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/

    相关文章:

    elasticsearch - 为什么某些字段无法通过 bool 查询来拟合?

    elasticsearch - 可以在 Elastic Search 上创建的索引数量有限制吗?

    elasticsearch - 可视化和分析来自Kafka的数据

    elasticsearch - _mget 和 _search 在 ElasticSearch 上的区别

    elasticsearch - Kibana Timelion:子选择或子查询以汇总最大和

    exception - Elasticsearch 查询 "empty index"

    python - 使用Elasticsearch DSL Python的复合Elasticsearch聚合

    spring-boot - ElasticsearchRepository是否具有获取id最大值的方法?如果没有,如何编写查询以获取id的最大值

    elasticsearch - Elastic Search从数组字段中选择元素

    elasticsearch - Logstash-拉是否可能?