尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

elasticsearch学习笔记(十一)——document的核心元数据、操作以及原理

elasticsearch学习笔记(十一)——document的核心元数据、操作以及原理
📅 发布时间:2026/7/5 15:48:52

先展示一个document数据结构

GET /product/_doc/1 { "_index" : "product", "_type" : "_doc", "_id" : "1", "_version" : 1, "_seq_no" : 0, "_primary_term" : 1, "found" : true, "_source" : { "name" : "gaolujie yagao", "desc" : "gaoxiao meibai", "price" : 30, "producer" : "gaolujie producer", "tags" : [ "meibai", "fangzhu" ] } }

下面我们就来开始分析了

1、document的核心元数据

(1)_index元数据

1、_index代表一个document存放在哪个index中
2、对于document,类似的数据都是放在一个索引里面的,,非类似的数据放在不同的索引中。例如,product_index是包含了所有商品的index,sales_index是包含了所有商品的销售数据的index,inventory_index是包含了所有库存相关的数据。如果想把所有的这些数据都放在一个索引中,比如创建一个company_index,是不合适的。
3、对于每个索引一般都是包含了很多类似的document,类似是什么意思,其实指的就是说,这些document的fields很大一部分是相同的,如果说你放了三个document,但是每个document的fields都完全不一样,这就不是类似了,就不太适合放到一个index里面去了。
4、对于语法,要求每个索引名称必须是小写的,不能用下划线开头,不能包含逗号。

(2)_type元数据

1、_type代表这个document属于index中的哪个类别(type)
2、一个索引只能有一个type,在后面的ES高版本中可能会废弃掉
3、对于type的语法,它可以是大写或是小写,但是同时不能用下划线开头,不能包含逗号

(3)_id元数据

1、_id代表document的唯一标识,与index和type一起,可以唯一标识和定位一个document
2、我们可以手动指定document的id,也可以不指定,那ES就会自动为我们创建一个id

下面附上中华石衫老师的手工图,说明一下为什么不同类型的数据不用一个索引存放

归纳一下就是如果把多个不同类型的数据放在一个索引中存储,当用户查询某一类的数据的时候比如商品数据,大量的请求过来,发现此时后台数据分析系统对这个索引下的另一类数据在做聚合分析比如销售数据,此时这些shard正在执行非常耗时,耗费资源的大型的聚合分析操作。就会导致document get请求,大量的性能不好,甚至超时。让用户感觉上来说,网速好慢,影响用户体验。

2、document id的生成

(1)手动指定document id

1、手动指定document id时,需要看下是否满足前提条件:
一般来说,是从某些其他的系统中,导入一些数据到es时,会采取这种方式,就是使用系统中已有数据的唯一标识,作为es中的document id。举个例子,假如我们现在在开发一个电商网站,做搜索功能,或者是OA系统,做员工的检索功能。这个时候数据首先会在网站系统或者IT系统内部的数据库中,会先有一份,此时肯定就会有一个数据库的primary id(自增长,UUID,或者是业务编号)如果将数据导入到ES中,此时就比较适合采用数据在数据库中的已有primary key。
2、格式

PUT /{index}/{type}/{id}
(2)自动生成document id

在什么情况下使用自动的document id。对于日志的搜集使用自动的document id是比较适合的。还有就是比如我们是在做一个系统,这个系统主要的数据存储就是es一种,也就是说,数据产生出来以后,可能就没有id,直接就放ES存储,那么这个时候,可能就不太适合说手动指定document id的形式了。
格式:

POST /{index}/{type}

注:自动生成的id,长度为20个字符,URL安全,base64编码,GUID,分布式系统并行生成时不可能会发生冲突

3、_source元数据以及定制返回结果

(1)_source元数据
先用一个例子引出一个document的_source,以及它的结构

GET /product/_doc/1 { "_index" : "product", "_type" : "_doc", "_id" : "1", "_version" : 1, "_seq_no" : 0, "_primary_term" : 1, "found" : true, "_source" : { "name" : "gaolujie yagao", "desc" : "gaoxiao meibai", "price" : 30, "producer" : "gaolujie producer", "tags" : [ "meibai", "fangzhu" ] } }

可以看出_source元数据就是说,我们在创建一个document的时候,使用的那个放在request body请求体中的json串。
(2)定制返回结果
指定_source参数返回哪些field即可

GET /product/_doc/1?_source=name,desc,tags { "_index" : "product", "_type" : "_doc", "_id" : "1", "_version" : 1, "_seq_no" : 0, "_primary_term" : 1, "found" : true, "_source" : { "name" : "gaolujie yagao", "desc" : "gaoxiao meibai", "tags" : [ "meibai", "fangzhu" ] } }

4、document的全量替换、强制创建以及lazy delete机制

(1)document的全量替换

1、全量替换的语法和创建文档是一样的,如果document id不存在,那么就是创建;如果document id已经存在,那么就是全量替换操作,替换document的json串内容
2、document是不可变的,如果要修改document的内容,第一种方式就是全量替换,直接对document重新建立索引,替换里面所有的内容
3、ES会将老的document标记为deleted,然后新增我们给定的一个document,当我们创建越来越多的document的时候,es会在适当的时机在后台自动删除标记为deleted的document

(2)document强制创建

创建文档和全量替换的语法是一样的,但是有时我们想新建文档,不想替换文档
格式:

PUT /{index}/{type}/{id}?op_type=create
(3)document的删除

格式:

DELETE /{index}/{type}/{id}

注意删除并不是物理删除,只是会将文档标记为deleted,当数据越来越多的时候,会在后台自动删除

相关新闻

  • AI技能手册:职场效率提升与自动化实战指南
  • 群晖NAS硬盘兼容性终极解决方案:Synology HDD db工具完全指南
  • Cap开源屏幕录制工具完全指南:告别Loom的终极解决方案

最新新闻

  • Memcached Session Manager常见问题排查:解决10个典型部署难题
  • 终极指南:如何在本地快速部署 abawuwao 图像文本到视频 AI 模型 [特殊字符]
  • Swirl深度解析:Android指纹动画背后的VectorDrawable技术终极指南
  • 直流有刷电机控制系统设计与H桥驱动应用
  • Word2Bits性能评估:Google类比任务中量化词向量的准确性测试
  • 如何扩展Google Maps iOS Utils:自定义渲染器与算法实现教程

日新闻

  • 基于YOLOv12的番茄成熟度智能检测系统开发
  • 终极RimWorld模组管理指南:用RimSort告别模组冲突烦恼
  • AI Agent框架开发:从理论到实践的完整指南

周新闻

  • 基于YOLOv12的番茄成熟度智能检测系统开发
  • 终极RimWorld模组管理指南:用RimSort告别模组冲突烦恼
  • AI Agent框架开发:从理论到实践的完整指南

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号