0
点赞
收藏
分享

微信扫一扫

elasticsearch中 fieldData


fieldData是干啥的?

当我们对text类型的字段进行首次聚类、排序、或者执行脚本的时候。将磁盘中的数据构建到内存够中。

默认情况下,大多数字段都已编入索引,这使它们可搜索。 但是,脚本中的排序,聚合和访问字段值需要与搜索不同的访问模式。

搜索需要回答“哪个文档包含该术语?”这个问题,而排序和汇总则需要回答一个不同的问题:“此字段对该文档的值是什么?”。

大多数字段可以将索引时生产的磁盘doc_values(​​doc_values | Elasticsearch Guide [8.1] | Elastic​​)用于此数据访问模式,但是文本(text)字段不支持doc_values。

替代的方案,文本(text)字段使用查询时内存中的数据结构,称为fielddata。 当我们首次将该字段用于聚合,排序或在脚本中使用时,将按需构建此数据结构。 它是通过从磁盘读取每个段的整个反向索引,反转术语↔︎文档关系并将结果存储在JVM堆中的内存中来构建的。

这是一个昂贵的操作。Fielddata针对text字段在默认时是禁用的 !

例如我们对一个 text类型的字段进行agg聚类操作。发现报错。这验证了text类型字段,默认是关闭Fielddata的。

elasticsearch中 fieldData_数据结构

 

 es的堆内存是本身就是昂贵的。Fielddata是没有限制的,并且它的结果会被缓存在堆中,并且不会被GC掉。


举报

相关推荐

0 条评论