您当前的位置: 首页 >  ar

水的精神

暂无认证

  • 2浏览

    0关注

    711博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

elasticsearch中 fieldData

水的精神 发布时间:2022-03-28 00:39:31 ,浏览量:2

fieldData是干啥的?

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

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

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

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

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

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

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

 

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

可以参看我这篇对堆内存详细分析的文章:elasticsearch内存占用详细分析_水的精神的博客-CSDN博客

 

关注
打赏
1664074814
查看更多评论
立即登录/注册

微信扫码登录

0.0482s