要不要也来分享分享一下啊

fielddata 究竟是什么呢?

Elasticsearch | 作者 FFFrp | 发布于2022年08月16日 | 阅读数:1277

目前所有文章都说是针对text类型的字段的排序聚合需要用到fielddata,但是我们通过接口 _cat/fielddata 发现 keyword字段,以及_parent 等元数据也有fielddata,它是不是doc_value 在内存中的一部分体现呢
已邀请:

Ombres

赞同来自:

fielddata按我的理解分成两大类,一类是非doc value的字段的,主要应用是替代lucene的doc value的类似结构。
另一类是doc value 的堆内内存部分,比如ord map

Charele - Cisco4321

赞同来自:

1 以下面这个索引字段来叙述:
111.png

 
当你插入name1="aaa"字段时,除了插入term(就是倒排索引),
它还会插入一个doc value类型的字段(名字也叫name1,内容也是"aaa")。
使用时,会从dvm/dvd文件中读出dv值,用来排序聚合。
 
当你插入name2="aaa"字段时,是没有dv的,
为了排序聚合,("fielddata": true时),ES会手工构造出一份dv,
因为text字段相对于keyword来说,内容较大(分词啥的),
维护这一份dv,会耗费很大内存产生问题。所以一般不用。
 
2
狭义上的fielddata,只是针对text类型的,
因为好像只有text字段才设置这个"fielddata": true。
 
从代码解度来看,fielddata是一个统称,
keyword,long,date,,,都和fielddata有关。ES把和排序聚合功能相关的东东,全部归结在fielddata功能里面。

要回复问题请先登录注册