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

es之null_value

官方文档

https://www.elastic.co/guide/en/elasticsearch/reference/8.8/null-value.html

什么是null值

在es中, null, [], [null] 这三个值会被当成null值(空值)

null值不能做搜索参数

get /dev-member/_search
{"query":{"term": {"employee_id": null}}
}

会报错:

{"error": {"root_cause": [{"type": "illegal_argument_exception","reason": "field name is null or empty"}],"type": "illegal_argument_exception","reason": "field name is null or empty"},"status": 400
}

原因是es不会为null值建立索引。

使用null_value搜索null值的记录

要想搜索null值文档,就要为null值创建索引。
一个方法是用一个特定值替换掉null值,比如用0来代替员工id不存在,搜索时直接使用特定值去搜索。
另一个方法是使用es提供的null_value功能。
在定义映射的时候指定null_value

"employee_id":{"type":"long","null_value":0
}

注意: null_value的值要和字段数据类型一致。
这样在索引记录的时候,es发现employee_id为null值,就会将这个文档归属到null_value指向的记录集中,本例是0。
但是es不会修改文档的原值, 所以在文档中, employee_id仍然为null值。
搜索的时候,就可以使用null_value值去搜索employe_id为null的文档。
例如:

get /dev-member/_search
{"query":{"term": {"employee_id": 0}}
}

返回的数据中 employee_id为null

{"took": 873,"timed_out": false,"_shards": {"total": 3,"successful": 3,"skipped": 0,"failed": 0},"hits": {"total": {"value": 1,"relation": "eq"},"max_score": 1,"hits": [{"_index": "dev-member","_id": "1234","_score": 1,"_source": {"user_id": "1234","employee_id": null}}]}
}

null_value不是指定默认值

一开始,我以为这是个默认值,也被gpt误导了,后面发现根本不是一回事。
如果在索引文档的时候,没有指定某个字段,那这个字段就不会存在文档中,使用null_value搜索是搜索不出来的,这时候要用exists搜索。

总结

  1. 在映射中可以指定字段的null_value, 当字段的值为null值时,es会使用null_value为此字段创建索引,但不会替换文档中的null值,客户端可以使用null_value搜索文档。
  2. 如果索引文档的时候,没有包含某字段,那null_value搜索也无法找到此记录,可以使用exists来搜索。

相关文章:

  • Python——自动创建文件夹
  • 一个基于Excel模板快速生成Excel文档的小工具
  • 23种设计模式(10)——门面模式
  • 在Go中处理时间数据
  • Knife4j使用教程(一) -- 在不同版本SpringBoot,选用不同的Knife4j相关的jar包
  • Linux系统之file命令的基本使用
  • Google单元测试sample分析(一)
  • elementUI 特定分辨率(如1920*1080)下el-row未超出一行却换行
  • Python深度学习实战-基于tensorflow原生代码搭建BP神经网络实现分类任务(附源码和实现效果)
  • Python:实现日历到excel文档
  • html5怎么实现语音搜索
  • SOLIDWORKS PDM 2024数据管理5大新功能
  • 制作自己的前端组件库并上传到npm上
  • 互动直播UI设置 之 主播UI
  • 【java学习—十】HashSet集合(4)
  • 【RocksDB】TransactionDB源码分析
  • Babel配置的不完全指南
  • gitlab-ci配置详解(一)
  • GitUp, 你不可错过的秀外慧中的git工具
  • HTML-表单
  • Java反射-动态类加载和重新加载
  • webgl (原生)基础入门指南【一】
  • Webpack入门之遇到的那些坑,系列示例Demo
  • 从零到一:用Phaser.js写意地开发小游戏(Chapter 3 - 加载游戏资源)
  • 记录一下第一次使用npm
  • 免费小说阅读小程序
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 设计模式走一遍---观察者模式
  • 我看到的前端
  • 小而合理的前端理论:rscss和rsjs
  • 移动端 h5开发相关内容总结(三)
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • HanLP分词命名实体提取详解
  • ​flutter 代码混淆
  • ​决定德拉瓦州地区版图的关键历史事件
  • (2020)Java后端开发----(面试题和笔试题)
  • (6)添加vue-cookie
  • (C语言)共用体union的用法举例
  • (ibm)Java 语言的 XPath API
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (动手学习深度学习)第13章 计算机视觉---微调
  • (附源码)spring boot基于Java的电影院售票与管理系统毕业设计 011449
  • (实战)静默dbca安装创建数据库 --参数说明+举例
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (一一四)第九章编程练习
  • (转)http协议
  • (转)memcache、redis缓存
  • **PyTorch月学习计划 - 第一周;第6-7天: 自动梯度(Autograd)**
  • .dat文件写入byte类型数组_用Python从Abaqus导出txt、dat数据
  • .MyFile@waifu.club.wis.mkp勒索病毒数据怎么处理|数据解密恢复
  • .NET Core跨平台微服务学习资源
  • .NET 中小心嵌套等待的 Task,它可能会耗尽你线程池的现有资源,出现类似死锁的情况
  • .NET大文件上传知识整理
  • .pub是什么文件_Rust 模块和文件 - 「译」
  • @Transaction注解失效的几种场景(附有示例代码)