2个字段并在一次插入一个字段里面_elasticsearch外用与内观(二)-当插入文档时,elasticsearch都在做什么...

Previous: elasticsearch外用与内观(一)-常用功能与使用方法

在了解了es的基本用法之后,我们再来看看当插入文档数据时,elasticsearch都在做什么。

ffbfe97483a97dbe55e19a810ec2c7f0.png

首先,es的索引只是一个逻辑概念,实际上是由一个个物理分片组成的,每个分片就是一个lucene实例,我们看到这里有9个分片,也就是有9个lucene实例,所以每个分片都能独立完成搜索功能,最后由es对结果进行合并。
分片包括主分片shard和副本分片replica,副本分片仅仅是主分片的一个拷贝。
每个分片是分布在不同的节点上的,每启动一个es实例,就是一个节点:

57270e815a7a007d4877943d0c1ad6fb.png

我们看到这里启动了3个es实例,也就是有3个节点。

我们往es的索引里插入的文档,首先被插入到主分片里:

1359644e3ee774baa234c1f011f68ee2.png

因为每个文档只能属于一个主分片,而es默认给索引设置了5个主分片,我们这里画的是3个主分片,所以这些文档在插入的时候,就会散列存储到不同的主分片里,也就是存到lucne实例里, 而lucene实例的内部结构,又是由很多lucene索引组成:

0b7ee2c7852b25a1c05efb0da41b6d41.png

我们建的es索引里的每个字段,就是一个个lucene索引:

a20516508c02d216f7703a54888cec78.png

而lucene索引是由一个个segment组成的,每个segment大小是不一样的,有大有小:

73d9bd45b4c04b244d7b5f82993cdde9.png

每个segment就是一个包含了一些倒排索引的独立段:

63b23c26cc549f187a4e3094436deb62.png

所以,我们在往es插入数据后,最后创建了很多包含了倒排索引的segment段,而搜索的时候,也是从这些segment段里的倒排索引进行搜索的:

35ea63433a2fa1c3167e7f20d7716e84.png

我们看一下整体的示意图:

dc66fbfa764fb300c694672fc8a8c1d7.png

最外层的就是一个es索引,因为索引有很多分片,每个分片就是一个lucene实例, lucene实例里,由lucene索引构成,而每个es索引字段就是一个lucene索引,lucene索引里边由segment组成,每个segment里边就是一些倒排索引。

因为倒排索引是搜索引擎的核心,我们简单介绍一下倒排索引

倒排索引

07fe8df35dd54286e954a45ddef362e5.png

数据库里的正排索引是这样存储的,数据以id为主键,然后是名称字段。这样虽然通过id获取数据很快,但是通过名称搜索就很慢。
而倒排索引是以拆分好的分词作为主键,id放在后边。这样如果想用某个关键字获取数据,就可以直接找到对应数据的id,从而获取到数据。

es在插入数据的时候,除了会构建倒排索引这种存储结构之外,还会构建另外一种存储结构,doc values。
Doc values 只支持不需要分词的字段:

3fafdd4fa3b231f4339d65c29bb41884.png

也就是如果字段是text类型,那么就只有倒排索引,而其他类型除了有倒排索引,还会存一个doc values。

doc values大概的结构是这样的,和数据库的存储结构类似:

8d96bf74da4d2198c6077fd683bd70fd.png

为什么需要这种格式的数据,因为像聚合操作这种功能,需要使用某个字段来进行分类,这就需要知道这个字段里都有什么内容(包含哪些terms),而倒排索引是把一个字段的内容都打散了存储的,所以需要使用doc values这种类似数据库的存储结构,来进行聚合操作。

这也引出了一个我们需要关注的点,即:聚合操作的字段,不能设置为text类型,因为text类型,没有doc values。

Next: elasticsearch外用与内观(三)-当搜索时,elasticsearch都在做什么(上)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/392698.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学习Spring Data JPA

简介 Spring Data 是spring的一个子项目,在官网上是这样解释的: Spring Data 是为数据访问提供一种熟悉且一致的基于Spring的编程模型,同时仍然保留底层数据存储的特​​殊特性。它可以轻松使用数据访问技术,可以访问关系和非关系…

git 常用commands(转)

常用 Git 命令清单 作者: 阮一峰 日期: 2015年12月 9日 我每天使用 Git ,但是很多命令记不住。 一般来说,日常使用只要记住下图6个命令,就可以了。但是熟练使用,恐怕要记住60~100个命令。 下面是…

检查集群状态命令_轻松管理Kubernetes集群的7个工具

Kubernetes正在不断加快在云原生环境的应用,但如何以统一、安全的方式对运行于任何地方的Kubernetes集群进行管理面临着挑战,而有效的管理工具能够大大降低管理的难度。K9sk9s是基于终端的资源仪表板。它只有一个命令行界面。无论在Kubernetes仪表板Web …

vscode 模糊部分代码_本周 GitHub 速览:您的代码有声儿吗?(Vol.38)

作者:HelloGitHub-小鱼干摘要:还记得花式夸赞程序员的彩虹屁插件 vscode-rainbow-fart 吗?它后续有人啦!JazzIt 同它的前辈 vscode-rainbow-fart 一样,是一个能让代码“发声”的工具,它会在脚本运行成功或者…

C语言递归实现二叉树(二叉链表)的三种遍历和销毁操作(实验)

今天写的是二叉树操作的实验,这个实验有三个部分: ①建立二叉树,采用二叉链表结构 ②先序、中序、后续遍历二叉树,输出节点值 ③销毁二叉树 二叉树的节点结构定义 typedef struct BiTNode //二叉树的节…

Django 入门项目案例开发(中)

关注微信公众号:FocusBI 查看更多文章;加QQ群:808774277 获取学习资料和一起探讨问题。 昨天已经描述了如何搭建Django的开发环境,今天描述业务流程,具体我们要实现一个什么样的业务; 以下的业务都是假设的…

纵横公路造价软件学习_通辽分公司组织开展2020年 养护工程造价预算培训

为进一步提高养护员工业务水平和业务素质,提升熟练掌握信息化公路工程造价预算,11月5日-11月8日期间,通辽分公司组织开展了2020年养护工程造价预算培训。养护科全体人员、基层所站统计人员共计16人参加培训。本次培训邀请了纵横公路工程造价管…

arcgis插值不覆盖区划图_ArcGIS绘图—空气质量站点数据插值绘制等值线图

作者:吴琳;陈天舒,山东大学环境科学(大气化学)博士在读数据(Excel格式):多站点污染物数据(国,省,市控点),站点经纬度信息绘…

JavaScript覆盖率统计实现

主要需求 1、 支持browser & nodejs 由于javascript既能够在浏览器环境执行,也能够在nodejs环境执行,因此须要能够统计两种环境下单元測试的覆盖率情况。 2、 透明、无缝 用户写单元測试用例的时候,不须要为了支持覆盖率统计多写代码&…

单元格内容分列多行_姓名太多,放在一列打印时浪费纸张,可以分成多行多列打印...

在日常工作中,往往会碰到这种情况(如下图):只有一列数据,而且比较多,如果打印起来就浪费纸张,然后复制、粘贴把表格变成几列,方便打印。今天小编和大家分享不用复制、粘贴,就能快速完成一列分成…

Java中接口、抽象类与内部类学习

2019独角兽企业重金招聘Python工程师标准>>> Java中接口、抽象类与内部类学习 接口与内部类为我们提供了一种将接口与实现分离的更加结构化的方法。 抽象类和抽象方法 抽象方法:仅有声明而没有方法体。 抽象类:包含一个或多个抽象方法的类&am…

docker导入镜像 liunx_docker扫盲?面试连这都不会就等着挂吧

推荐阅读:java喵:6大面试技能树:JAVA基础JVM算法数据库计算机网络操作系统​zhuanlan.zhihu.com一只Tom猫:都是“Redis惹的祸”,害我差点挂在美团三面,真是“虚惊一场”!​zhuanlan.zhihu.com现…

Linux iptables:规则原理和基础

什么是iptables? iptables是Linux下功能强大的应用层防火墙工具,但了解其规则原理和基础后,配置起来也非常简单。 什么是Netfilter? 说到iptables必然提到Netfilter,iptables是应用层的,其实质是一个定义规…

太阳系八大行星碰撞的视频_火星的身世:从太阳系的起源说起

大约46亿年前盘状的太阳星云从一大片又冷又暗的气体云中诞生太阳自己并没有任何暴露确切年龄的线索,我们之所以能够知道太阳系的“生日”,是因为迄今从陨石中找到的最古老固体物质,年龄约为45.68亿年。一般认为,太阳系的各个地方是…

博科查看光功率_法拉第旋光器:非互易性旋转光的偏振

法拉第旋光器是利用法拉第效应制作的光学器件,当入射光正向(或反向)进入旋光器时,入射光偏振面会发生旋转。法拉第效应1845年,法拉第发现:当一束平面偏振光通过置于磁场中的磁光介质时,平面偏振光的偏振面就会随着平行…

ps怎么对比原图快捷键_PS学习之旅:ps如何制作满天星,让你夜晚的天空图片更美...

ps学习之旅,本文介绍关于如何利用ps软件来制作满天星,让你夜晚的天空图片更美,操作很简单哦。1工具/原料Adobe Photoshop CS6软件图片一张2效果展示原图:效果图:3方法/步骤(1)打开PS,选择你想要加星星的一张…

永磁直驱风力发电机结构图_国内首台10MW海上永磁直驱风力发电机研制成功

2019首届新能源产业投融资论坛2019年10月25日周老师:157129595968月21日,具有完全自主知识产权、国内首台10MW海上永磁直驱风力发电机在东方电气集团东方电机有限公司研制成功,以此优异成绩向新中国成立70周年献礼。10MW海上永磁直驱风力发电…

struts2官方 中文教程 系列六:表单验证

先贴个本帖的地址,以免被爬:struts2教程 官方系列六:表单验证 即 http://www.cnblogs.com/linghaoxinpian/p/6906720.html 下载本章节代码 介绍 在本教程中,我们将探索使用Struts2来验证用户在表单上的输入。有两种方法可以来进…

c++ dll 类使用_在.Net Core 中使用钩子

目录前言什么是钩子使用钩子3. 挂载多个钩子4. 在钩子中加载额外的程序集5. 在 Asp.Net Web Api 项目中使用钩子结束语演示代码下载前言Host startup hook,是2.2中提供的一项新的功能,通过使用主机启动钩子,允许开发人员在不修改代码的情况下…

萨默尔机器人_助力产业发展 西安市人工智能机器人学会正式成立

8月23日,西安市人工智能机器人学会在西咸新区沣东新城协同创新港正式成立。西安报业全媒体记者 冯炜 摄8月23日,西安市人工智能机器人学会正式成立。学会将通过市场化机制、社会化服务等方式,整合科技创新资源和人才培养资源,促进…