大数据-184 Elasticsearch Doc Values 机制详解
1. 什么是 Doc Values
Doc Values 是索引时生成的磁盘列式存储数据结构,专门为排序、聚合、脚本取值优化。
- 与 fielddata(内存)相比,doc values 更节省内存
- 写入时生成,查询时从磁盘读取
2. 默认行为
默认开启的类型
- numeric
- date
- IP
- keyword
- 等等
默认关闭的类型
- text:不提供 doc values(因为 text 被分词,不适合聚合/排序)
3. Text 字段如何聚合/排序
3.1 方案一:keyword 子字段
{
"content": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword"
}
}
}
}
使用 content.keyword 进行聚合/排序。
3.2 方案二:启用 fielddata
{
"content": {
"type": "text",
"fielddata": true
}
}
注意:fielddata 加载到堆内存,对大字段有严重内存压力,谨慎使用。
4. 禁用 Doc Values
对于不需要排序/聚合/脚本的字段,可以禁用:
{
"my_field": {
"type": "keyword",
"doc_values": false
}
}
5. 注意事项
- Mapping 不能随意修改,修改需要重建索引
- 字段类型一旦确定,很难更改
6. 总结
- Doc Values 是磁盘列式存储
- 大多数类型默认开启
- text 字段需要用 keyword 子字段或 fielddata 才能聚合/排序