映射:null_value 详解
- 1.核心支持字段类型
- 2.使用注意事项
- 3.使用示例
- 3.1 数值字段示例
- 3.2 字符串字段示例
- 3.3 日期字段示例
- 3.4 查询示例
- 4.实际应用场景
- 5.替代方案比较
null_value
是 Elasticsearch 中字段级别的参数,用于指定当字段值为 null
或字段不存在时,在索引中存储的替代值。这个功能主要用于确保 null
值可以被搜索和聚合。
1.核心支持字段类型
null_value
主要支持以下核心字段类型:
- 数值类型
long
integer
short
byte
double
float
half_float
scaled_float
- 字符串类型
keyword
text
(需要配合keyword
子字段使用)
- 日期类型
date
- 布尔类型
boolean
- IP 类型
ip
2.使用注意事项
- 类型匹配
null_value
必须与字段类型匹配。- 例如:数值字段的
null_value
必须是数字。
- 查询影响
- 设置的
null_value
会作为实际值被索引。 - 查询时需要查询替代值而非真正的
null
。
- 设置的
- 聚合影响
- 聚合时会将这些文档归入替代值的分组。
- 存储空间
- 会增加索引大小,因为所有
null
都会被替换为具体值。
- 会增加索引大小,因为所有
- 动态映射
- 动态映射不会自动设置
null_value
,需要显式定义。
- 动态映射不会自动设置
3.使用示例
3.1 数值字段示例
PUT products
{"mappings": {"properties": {"price": {"type": "float","null_value": 0.0}}}
}
3.2 字符串字段示例
PUT users
{"mappings": {"properties": {"email": {"type": "keyword","null_value": "unknown@example.com"}}}
}
3.3 日期字段示例
PUT events
{"mappings": {"properties": {"event_date": {"type": "date","null_value": "1970-01-01"}}}
}
3.4 查询示例
索引文档:
PUT products/_doc/1
{"name": "Product A","price": null // 将被索引为 0.0
}PUT products/_doc/2
{"name": "Product B" // price 字段缺失,将被索引为 0.0
}
查询替代值:
GET products/_search
{"query": {"term": {"price": 0.0}}
}
4.实际应用场景
- 统一处理缺失值:确保所有文档在特定字段上都有可搜索的值。
- 聚合分析:使
null
值能够参与聚合计算。 - 数据迁移:处理源数据中可能存在的
null
值。 - 默认值设置:为缺失字段提供业务上有意义的默认值。
5.替代方案比较
方案 | 优点 | 缺点 |
---|---|---|
null_value | 统一处理,可搜索可聚合 | 占用额外存储空间 |
exists 查询 | 不占用额外空间 | 只能判断存在性,不能聚合 |
应用层处理 | 灵活控制 | 增加应用复杂度 |
对于需要搜索和聚合 null
值的场景,null_value
是最直接的解决方案。