Elasticsearch:保留字段名称

作为 Elasticsearch 用户,我们从许多不同的位置收集数据。 我们使用 Logstash、Beats 和其他工具来抓取数据并将它们发送到 Elasticsearch。 有时,我们无法控制数据本身,我们需要管理数据的结构,甚至需要在摄取数据时处理字段名称。
Elasticsearch 有一些保留的字段名称,你不能在文档中使用这些名称。
如果文档具有这些字段之一,则无法为该文档编制索引。 但是,这并不意味着你不能在文档中的任何地方使用这些字段名称。 该限制仅对根节点(root node)有效。 因此,你无法索引以下文档:
PUT twitter/_doc/1
{"_id": 1
}
你会得到如下错误:

但是你可以成功地写入如下的文档:
PUT twitter/_doc/1
{"user": {"_id": 1,"name": "liuxg"}
}
究其原因,在上面的 _id 它不是在 root node 下的字段。
因此,正如你在上面看到的 _id 字段,你不能在文档中使用以下字段名称作为 root 字段名称:
_id
_field_names
_index
_seq_no
_nested_path
_ignored
_routing
_data_stream_timestamp
_tier
_version
_feature
_source
_primary_term *
_type *
注意:上面用 * 标注的字段对于老版本的 elasticsearch 这个字段也是保留关键字
这意味着如果你有将这些字段名称作为根字段的文档。 你会得到一个错误。 例如,你想使用 Logstash 移动该数据。 你有一个包含如下内容的文件:
{"ImdbId": "tt0030629","_id": "tt0030629","name": "Prison Without Bars","year": "1938","certificate": "Approved","runtime": "72 min","genre": ["Crime", " Drama", " Romance"],"ratingValue": "6.2","summary_text": "Suzanne, Renee, Nina and Marta all hate being in prison, being slapped and treated badly, and so all the girls are trying to escape. Madame Appel just causes chaos all the time, with her ... See full summary\u00a0\u00bb","ratingCount": "66"
} {"ImdbId": "tt0030528","_id": "tt0030528","name": "Orage","year": "1938","certificate": "","runtime": "98 min","genre": ["Drama"],"ratingValue": "5.7","summary_text": "Orage is a 1938 French drama film directed by Marc All\u00e9gret. The screenplay was written by Marcel Achard and H.G. Lustig, based on play \"Le venin\" by Henri Bernstein. The films stars ... See full summary\u00a0\u00bb","ratingCount": "66"
}
因此,当你尝试使用 Logstash 摄取它时,你将收到以下错误。 即使你在单独索引这些文档时也会遇到上述错误。比如我们使用如下的一个例子:
sample.log
{"_id":1,"timestamp":"2019-09-12T13:43:42Z","paymentType":"Amex","name":"Merrill Duffield","gender":"Female","ip_address":"132.150.218.21","purpose":"Toys","country":"United Arab Emirates","age":33}
{"_id":2,"timestamp":"2019-08-11T17:55:56Z","paymentType":"Visa","name":"Darby Dacks","gender":"Female","ip_address":"77.72.239.47","purpose":"Shoes","country":"Poland","age":55}
{"_id":3,"timestamp":"2019-07-14T04:48:25Z","paymentType":"Visa","name":"Harri Cayette","gender":"Female","ip_address":"227.6.210.146","purpose":"Sports","country":"Canada","age":27}
{"_id":4,"timestamp":"2020-02-29T12:41:59Z","paymentType":"Mastercard","name":"Regan Stockman","gender":"Male","ip_address":"139.224.15.154","purpose":"Home","country":"Indonesia","age":34}
{"_id":5,"timestamp":"2019-08-03T19:37:51Z","paymentType":"Mastercard","name":"Wilhelmina Polle","gender":"Female","ip_address":"252.254.68.68","purpose":"Health","country":"Ukraine","age":51}
logstash_input.conf
input {file {path => "//Users/liuxg/elastic/logstash-8.6.2/sample.log"type => "applog"codec => "json"start_position => "beginning"sincedb_path => "/dev/null"}
}output {stdout {codec => rubydebug}elasticsearch {hosts => ["localhost:9200"]index => "json-%{+YYYY.MM.dd}"}
}
我们使用如下的命令来启动对数据的采集:
$ pwd
/Users/liuxg/elastic/logstash-8.6.2
$ ls sample.log logstash_input.conf
logstash_input.conf sample.log
./bin/logstash -f logstash_input.conf

如你所见,错误与我们上面得到的错误相同。 那么,我们需要做什么? 有一些解决方案可以处理这些类型的数据操作。 你可以在源上修复文档,也可以使用 mutate 过滤器在 Logstash 中管理它们:
logstash_input.conf
input {file {path => "//Users/liuxg/elastic/logstash-8.6.2/sample.log"type => "applog"codec => "json"start_position => "beginning"sincedb_path => "/dev/null"}
}filter {mutate {rename => {"_id" => "id"}}
}output {stdout {codec => rubydebug}elasticsearch {hosts => ["localhost:9200"]index => "json-%{+YYYY.MM.dd}"}
}
我们再次运行 Logstash:
./bin/logstash -f logstash_input.conf

我们可以看到这次数据被成功地写入,并且我们可以在 Kibana 中进行查看:

当您重新运行 logstash 时,您将看到文档将被正确索引。 另一方面,我试图解决摄取管道的问题。 一开始我认为这对我来说可能是一个更好的解决方案。 但有趣的是,我对摄取管道尝试了很多不同的方法,但我找不到解决方案。 这是我尝试使用摄取管道的方法:
POST _ingest/pipeline/_simulate
{"pipeline": {"processors": [{"rename": {"field": "_id","target_field": "id"}}]},"docs": [{"_index": "myindex","_id": 1,"_source": {"_id": "2"}}]
}
我收到以下错误:
{"error": {"root_cause": [{"type": "illegal_argument_exception","reason": "unexpected metadata [_id:1] in source"}],"type": "illegal_argument_exception","reason": "unexpected metadata [_id:1] in source"},"status": 400
}相关文章:
Elasticsearch:保留字段名称
作为 Elasticsearch 用户,我们从许多不同的位置收集数据。 我们使用 Logstash、Beats 和其他工具来抓取数据并将它们发送到 Elasticsearch。 有时,我们无法控制数据本身,我们需要管理数据的结构,甚至需要在摄取数据时处理字段名称…...
Qt 套接字类(QTcpSocket和QUdpSocket)解密:迈向 Qt 网络编程之巅
Qt 套接字类解密:迈向 Qt 网络编程之巅 一、套接字类简介(Introduction to Socket Classes)# 套接字类的作用(Role of Socket Classes)Qt 中常见套接字类概述(Overview of Common Socket Classes in Qt&…...
Python视频编辑库:MoviePy
MoviePy MoviePy是一个关于视频编辑的python库,主要包括:剪辑,嵌入拼接,标题插入,视频合成(又名非线性编辑),视频处理,和自定制效果。可以看gallery中的一些实例来了解用法。MoviePy可以读写所有的音频和视频格式,包括GIF,通过python2.7+和python3可以跨平台运行于window/M…...
课程3:ASP.NET Core 身份验证 - Cookie
课程简介目录 🚀前言一、.Net Core 身份验证简介二、开启Cookie身份验证三、添加登录接口3.1 添加登录Dto3.2 添加登录接口Login3.3 获取用户信息接口,添加身份验证四、获取用户信息接口测试4.1 测试获取用户信息接口4.2 登录4.3 再次测试:获取用户信息接口4.4 其他浏览器测…...
Visual Studio 2022如何安装和使用MSDN
我是荔园微风,作为一名在IT界整整25年的老兵,在后台收到提问,问我Visual Studio 2022如何安装和使用MSDN,这个我之前也没有在这个版本上装过MSDN,我之前是在Visual Studio 2017版上装过MSDN,那既然有人问了…...
82.qt qml-2D粒子系统、粒子方向、粒子项(一)
由于粒子系统相关的类比较多, 所以本章参考自QmlBook in chinese的粒子章节配合学习: 由于QmlBook in chinese翻译过来的文字有些比较难理解,所以本章在它的基础上做些个人理解,建议学习的小伙伴最好配合QmlBook in chinese一起学习。 1.介绍 粒子模拟的核心是粒子系统(Partic…...
引用的底层原理(汇编指令),引用与指针的联系与区别
TIPS 2. 3. 4. 引用的底层本质 在语法层面上的话,这个引用是不开空间的,相当于是对一个变量进行一个取别名的这么一个操作。在底层实现上实际是有空间的,因为引用是按照指针方式来实现的。然而如果你从底层的角度去看的话,因…...
磁盘的移臂调度算法
1、概要 访问磁盘,首先要找到数据,但机械硬盘并不是直接电子读取,是需要移动磁头到相应的数据块上才能读取的,即需要磁头移动到目标柱面(磁道),然后磁片旋转使磁头能访问到相应扇区,进而读取到数据。 根据访…...
软考第六章 网络互连与互联网
网络互连与互联网 1.网络互连设备 组成因特网的各个网络叫做子网,用于连接子网的设备叫做中间系统。它的主要作用是协调各个网络的工作,使得跨网络的通信得以实现。 网络互连设备可以根据它们工作的协议层进行分类: 中继器:工…...
C6678-缓存和内存
C6678-缓存和内存 全局内存映射扩展内存控制器(XMC)-MPAX内存保护与地址扩展使用例程缓存 全局内存映射 扩展内存控制器(XMC)-MPAX内存保护与地址扩展 每个C66x核心都具有相同大小的L1和L2缓存,并且可配置为普通内存使…...
实操| 前端新人无敲代码开发APP
作为一种大型的基于GPT-3. 5结构的语言模型,ChatGPT由OpenAI训练,采用深度学习技术,通过大量的文本数据学习,可以生成类似于人类自然语言的文字。ChatGPT是一种非常强大的对话引擎,能进行对话、回答问题和完成任务。Ch…...
OpenCV图像处理之傅里叶变换
文章目录 OpenCV图像处理之傅里叶变换图像处理之傅里叶变换流程图OpenCv图像处理之傅里叶变换OpenCv傅里叶变换之低通滤波OpenCv傅里叶变换之高通滤波 OpenCV图像处理之傅里叶变换 傅里叶变换:目的就是得到图像的低频和高频,然后针对低频和高频进行不同…...
Docker网络案例
bridge 是什么 Docker 服务默认会创建一个 docker0 网桥(其上有一个 docker0 内部接口),该桥接网络的名称为docker0,它在内核层连通了其他的物理或虚拟网卡,这就将所有容器和本地主机都放到同一个物理网络。Docker 默认指定了 docker0 接口 的 IP 地址和子网掩码,让主机…...
Java实验课的学习笔记(二)类的简单使用
本文章就讲的是很基础的类的使用 重点大概就是类的构造函数以及一些很基础的东西。 实验内容是些老生常谈的东西,Complex类,在当初学C面向对象的时候也是这个样子展开的。 内容如以下: public class Complex {float real;float imag;public…...
实战案例|聚焦攻击面管理,腾讯安全威胁情报守护头部券商资产安全
金融“活水”润泽千行百业,对金融客户来说,由于业务场景存在特殊性和复杂性,网络安全必然是一场“持久战”。如何在事前做好安全部署,构建威胁情报分析的防护体系至为重要,实现更为精准、高效的动态防御。 客户名片 …...
c++算法初级8——递推
c算法初级8——递推 文章目录 c算法初级8——递推递推递推思想的运用错位排序杨辉三角(二维递推) 递推 递推思想: 根据已有的东西一点点地推出未知的东西。 使用递推解题三步骤: 数学建模找出递推式和初始条件写出代码。 张爽…...
Java后端面试题 重难点和被问到没答上来的点(包括java基础、关系型数据库、Redis、计算机网络、Spring、Java多线程、vue等)
以下是我记录的一些重点问题和面试中被问到没答上来的问题,包括java基础、关系型数据库、Redis、计算机网络、Spring、Java多线程、vue 问题目录 1.fail-safe和fail-fast2.四引用3.explain字段重要内容4.maven三大生命周期5.MYSQL 创建修改表6.数据库三范式7.Strin…...
易观千帆 | 2023年3月银行APP月活跃用户规模盘点
易观:2023年3月手机银行服务应用活跃人数53289.05万,环比增长2.15%,同比增长8.87%。 2023年3月信用卡服务应用活跃人数10800.71万,环比增长1.87%,同比增长18.64%。 2023年3月城商行手机银行服务应用活跃人数3827.43万&…...
[Android+JetPack] (Java实现) Retrofit2+RxJava3+Paging3+RecyclerView 实现加载网络数据例子 记录
文章目录 前言参考链接依赖库及版本Demo效果接口及数据展示各项模块Retrofit2Bean,对应上面的接口返回.Service API部分 Paging3PagingSource以及 RxPagingSourcePagingDataAdapter 适配器ViewModelPublicInfoPage /Activity 最后 前言 继续安卓学习之旅,本章的主要目标是: 1.完…...
Java 解析配置文件注入到配置类属性中供全局使用【开发记录】
1、背景:假设目前有两个接口,一个是查询快递订单状态的JSF接口,一个是查询快运订单状态的JSF接口,现有一个需求,要将这两个接口统一为一个入口,发布到物流开放平台供外界调用。 注意:以下代码均…...
数据库索引原理:B+树与哈希索引的深度对决
数据库索引原理:B树与哈希索引的深度对决在数据库的世界里,索引是提升查询性能的“核武器”。如果把数据库表比作一本厚厚的书,那么索引就是书中的目录。没有目录,想要找到特定的知识点只能一页页翻找(全表扫描&#x…...
Linux环境下Oracle 19C补丁安装保姆级教程:从下载到验证的完整流程
Linux环境下Oracle 19C补丁安装全流程实战指南 在数据库运维工作中,补丁管理是确保系统安全稳定运行的关键环节。Oracle 19C作为当前长期支持版本,其补丁安装过程虽然标准化程度高,但实际操作中仍存在不少容易踩坑的细节。本文将基于实战经验…...
COMSOL数据可视化避坑指南:如何用SciPy的griddata处理不规则网格数据?
COMSOL数据可视化避坑指南:如何用SciPy的griddata处理不规则网格数据? 当你从COMSOL导出电场、温度场或其他物理场数据时,是否遇到过这样的困扰:明明在COMSOL中看起来光滑连续的场分布,导出到MATLAB或Python中绘制时却…...
厂房钢结构工程:从设计、制造到安装验收的关键要点全解析
一、什么是厂房钢结构工程,为什么越来越常见?厂房钢结构工程,简单说,就是以钢柱、钢梁、檩条、支撑体系、屋面系统和围护系统为主体,完成工业厂房、仓储车间、物流中心、生产车间及配套功能区建设的一类工程。相比传统…...
ED-最优设计实战:如何用Python实现鲁棒实验设计(附完整代码)
ED-最优设计实战:如何用Python实现鲁棒实验设计(附完整代码) 在数据科学和工程领域,实验设计是优化参数估计和模型性能的关键环节。传统D-最优设计虽然经典,但在面对参数不确定性时往往表现不佳。本文将带你深入理解ED…...
智能排障:快马ai助手实时解答openclaw安装难题,告别卡壳
最近在折腾OpenClaw这个工具时,发现它的安装过程真是让人头大——各种依赖报错、环境冲突、权限问题接踵而至。好在发现了InsCode(快马)平台的AI辅助功能,简直像给安装过程装上了智能导航。下面分享我的实战经验,如何用AI快速攻克OpenClaw安装…...
ReadCat:开源无广告小说阅读器,为深度阅读者打造纯净体验
ReadCat:开源无广告小说阅读器,为深度阅读者打造纯净体验 【免费下载链接】read-cat 一款免费、开源、简洁、纯净、无广告的小说阅读器 项目地址: https://gitcode.com/gh_mirrors/re/read-cat 在信息爆炸的时代,找到一款无广告、界面…...
Qt6.10.1 + QCustomPlot 2.1.1 串口绘图实战:从Qt5老项目迁移到新版本的完整踩坑记录
Qt6.10.1与QCustomPlot 2.1.1串口绘图项目迁移实战指南 当Qt5项目需要升级到Qt6时,许多开发者都会面临兼容性挑战。特别是那些涉及串口通信和数据可视化的项目,往往隐藏着不少"坑"。本文将带你完整走一遍从Qt5老项目迁移到Qt6.10.1的全过程&am…...
异构计算与边缘协同:基于 ARM/X86 的企业级 AI 视频中台架构设计
引言:算力碎片化时代的“异构”挑战 在 AI 落地安防的深水区,架构师面临的最大挑战不再是算法模型的精度,而是算力底座的碎片化。项目现场往往呈现出复杂的“万国牌”局面:总部机房可能部署着 NVIDIA A100 的 x86 服务器用于离线训…...
快速上手语音情感分析:Emotion2Vec+系统参数配置与结果解读
快速上手语音情感分析:Emotion2Vec系统参数配置与结果解读 1. 系统概述与核心价值 Emotion2Vec Large语音情感识别系统是一款基于深度学习的语音分析工具,能够自动识别语音中蕴含的情感状态。该系统由科哥团队基于阿里达摩院ModelScope平台的原始模型进…...
