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

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

先展示一个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,当数据越来越多的时候,会在后台自动删除

http://www.jsqmd.com/news/1129081/

相关文章:

  • 终极指南:如何用MPC-HC实现专业级视频帧提取与截图功能
  • BubbleTabBar未来展望:路线图与新功能预告
  • 终极指南:为什么Thorium浏览器比Chrome更适合你的3个关键理由
  • Cap开源屏幕录制工具完全指南:告别Loom的终极解决方案
  • 如何免费使用AI图像放大工具:Upscayl完整入门指南
  • Perlite成本分析:自建与Obsidian Publish的经济对比
  • iOS开发 SwitftUI 13:提示、弹窗、上下文菜单
  • adsad
  • 从键盘到摇杆:WoWmapper如何重新定义你的魔兽世界游戏体验
  • 【Atlas】如何从官方下载 Apache Atlas 2.4.0 版本?
  • 基于TPAFE0808和STM32的多通道信号采集系统设计
  • LTC6904与PIC18F85J50实现高精度方波发生器设计
  • PowerShell与CMD执行外部脚本的安全风险与防范指南
  • 深度学习图像分割实战:从原理到代码实现
  • 【信息科学与工程学】计算机科学与自动化——第三十八篇 质量工程 02 云数据中心质量工程
  • IIM-42652与PIC18LF25K42的6DoF运动追踪系统设计
  • 3个颠覆性方案:Qwen3-VL如何让视觉AI从“看懂“到“会做“
  • 禅道开源项目管理:如何用敏捷思维重构你的软件开发流程
  • 终极Android优化指南:无需root权限一键清理预装应用
  • 皮具制品发霉如何处理,及怎么做预防方案
  • elasticsearch学习笔记(十二)——Elasticsearch并发冲突问题以及锁机制
  • 【信息科学与工程学】【数据科学】第四十八篇 大数据与数据科学和应用数学01
  • 手把手带你打 Kaggle!F1 进站预测实战
  • MoveIt2运动规划器深度性能对比:OMPL vs CHOMP vs STOMP架构解析与优化策略
  • C# 的灰度处理 vs JavaScript 的 Canvas:跨越“体验的深渊”
  • Codex 桌面客户端下载与安装,Windows 和 Mac 新手一步到位
  • java面试题:netty 和spring cloud 阿里巴巴
  • 大麦网自动化抢票脚本:Python技术实现与实战应用指南
  • 3步掌握MAVProxy:Python无人机地面站完全掌控指南
  • 【Atlas】为什么 Atlas 依赖 HBase?HBase 在 Atlas 中扮演什么角色?