当前位置: 首页 > news >正文

【Elasticsearch】映射:null_value 详解

映射: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 是最直接的解决方案。

相关文章:

  • 元素水平垂直居中的方法
  • Web后端基础(基础知识)
  • godot小白入门前的一些前置知识了解
  • 快速上手Linux文本流编辑器sed
  • Docker 安装 Ubuntu
  • 存储的基本原理
  • Go切片与映射的内存优化技巧:实战经验与最佳实践
  • 【五子棋在线对战】三.数据管理模块实现
  • Android 线性布局中常见的冲突属性总结
  • Android Firebase 推送问题排查指南
  • Android写一个捕获全局异常的工具类
  • android关于pthread的使用过程
  • ArkUI-X与Android桥接通信之方法回调
  • ArkUI-X与Android桥接通信之消息通信
  • 在Unity中Update和Fixedupdate有什么区别
  • PHP中如何定义常量以及常量和变量的主要区别
  • 【Pikachu】PHP反序列化RCE实战
  • 讲述我的plc自学之路 第十三章
  • Unity VR/MR开发-开发环境准备
  • 大数据学习(133)-Hive数据分析2