正排索引
倒排索引
全文搜索非常快速
对排序不友好
是在索引时构建,会序列化到磁盘
搜索需要用到倒排索引,排序和聚合需要借助正排索引。doc_values 和 fielddata 就是用来给文档建立正排索引的。
大部分的字段都可以使用 doc_values 作为数据访问机制,但是 text 类型不支持 doc_values。
因此如果要使用 text 类型的字段进行排序、聚合等,就需要使用一种内存数据结构——fielddata,这个机制默认是禁用的
doc_values 和 fielddata 两者的区别如下
doc_values | fielddata | |
---|---|---|
创建时机 | 索引时 | 运行时动态创建 |
存储位置 | 磁盘 | 内存(jvm heap) |
优点 | 不占用内存空间 | 不占磁盘空间 |
缺点 | 稍微影响索引速度 | 占用运行时资源,如内存 |
不推荐使用 fielddata,可以参考优化
doc_values 的特点
fielddata 特点**
在启用 fielddata 之前,请考虑为什么要使用文本字段进行聚合、排序或在脚本中。这样做通常没有意义,因为它们的内存和计算成本很高。