Elasticsearch进阶之(核心概念、系统架构、路由计算、倒排索引、分词、Kibana)

news2024/10/2 1:38:29

Elasticsearch进阶之(核心概念、系统架构、路由计算、倒排索引、分词、Kibana)

1、核心概念:

1.1、索引(Index)

一个索引就是一个拥有几分相似特征的文档的集合。比如说,你可以有一个客户数据的索引,可以有一个产品目录的索引,还可以有一个订单数据的索引。一个索引由一个名字来标识(必须全部是小写字母),并且当我们要对这个索引中的文档进行索引、搜索、更新和删除的时候,都要使用到这个名字。在一个集群中,可以定义任意多的索引。

能搜索的数据必须索引,这样的好处是可以提高查询速度,比如:新华字典前面的目录就是索引的意思,目录可以提高查询速度

1.2、类型(Type)

在一个索引中,你可以定义一种或多种类型。

一个类型是你的索引的一个逻辑上的分类/分区,其语义完全由你来定。通常,会为具有一组共同字段的文档定义一个类型。不同的版本,类型发生了不同的变化
在这里插入图片描述

1.3、文档(Document)

一个文档是一个可被索引的基础信息单元,也就是一条数据。

比如:你可以拥有某一个客户的文档,某一个产品的一个文档,当然,也可以拥有某个订单的一个文档。文档以 JSON(Javascript Object Notation)格式来表示,而 JSON 是一个到处存在的互联网数据交互格式。

在一个 index/type 里面,你可以存储任意多的文档。

1.4、字段(Field)

相当于是数据表的字段,对文档数据根据不同属性进行的分类标识。

1.5、映射(Mapping)

mapping 在处理数据的方式和规则方面做了一些限制,如:某个字段的数据类型、默认值、分析器、是否被索引等等。这些都是映射里面可以设置的,其它就是处理 ES 里面数据的一些使用规则设置也叫做映射,按着最优规则处理数据对性能提高很大,因此才需要建立映射,并且需要思考如何建立映射才能对性能更好。

1.6、分片(Shards)

一个索引可以存储超出单个节点硬件限制的大量数据。比如,一个具有 10 亿文档数据的索引占据 1TB 的磁盘空间,而任一节点都可能没有这样大的磁盘空间。或者单个节点处理搜索请求,响应太慢。为了解决这个问题,Elasticsearch 提供了将索引划分成多份的能力,每一份就称之为分片。当你创建一个索引的时候,你可以指定你想要的分片的数量。每个分片本身也是一个功能完善并且独立的“索引”,这个“索引”可以被放置到集群中的任何节点上。

分片很重要,主要有两方面的原因:

  1. 允许你水平分割 / 扩展你的内容容量。
  2. 允许你在分片之上进行分布式的、并行的操作,进而提高性能/吞吐量。

至于一个分片怎样分布,它的文档怎样聚合和搜索请求,是完全由 Elasticsearch 管理的,对于作为用户的你来说,这些都是透明的,无需过分关心。

1.7、副本(Replicas)

在一个网络 / 云的环境里,失败随时都可能发生,在某个分片/节点不知怎么的就处于离线状态,或者由于任何原因消失了,这种情况下,有一个故障转移机制是非常有用并且是强烈推荐的。为此目的,Elasticsearch 允许你创建分片的一份或多份拷贝,这些拷贝叫做复制分片(副本)。

复制分片之所以重要,有两个主要原因:

  1. 在分片/节点失败的情况下,提供了高可用性。因为这个原因,注意到复制分片从不与原/主要(original/primary)分片置于同一节点上是非常重要的。
  2. 扩展你的搜索量/吞吐量,因为搜索可以在所有的副本上并行运行。

总之,每个索引可以被分成多个分片。一个索引也可以被复制 0 次(意思是没有复制)或多次。一旦复制了,每个索引就有了主分片(作为复制源的原来的分片)和复制分片(主分片的拷贝)之别。分片和复制的数量可以在索引创建的时候指定。在索引创建之后,你可以在任何时候动态地改变复制的数量,但是你事后不能改变分片的数量。默认情况下,Elasticsearch 中的每个索引被分片 1 个主分片和 1 个复制,这意味着,如果你的集群中至少有两个节点,你的索引将会有 1 个主分片和另外 1 个复制分片(1 个完全拷贝),这样的话每个索引总共就有 2 个分片,我们需要根据索引需要确定分片个数。

1.8、分配(Allocation)

将分片分配给某个节点的过程,包括分配主分片或者副本。如果是副本,还包含从主分片复制数据的过程。这个过程是由 master 节点完成的。

2、系统架构:

在这里插入图片描述
一个运行中的 Elasticsearch 实例称为一个节点,而集群是由一个或者多个拥有相同cluster.name 配置的节点组成, 它们共同承担数据和负载的压力。当有节点加入集群中或者从集群中移除节点时,集群将会重新平均分布所有的数据。

当一个节点被选举成为主节点时, 它将负责管理集群范围内的所有变更,例如增加、删除索引,或者增加、删除节点等。 而主节点并不需要涉及到文档级别的变更和搜索等操作,所以当集群只拥有一个主节点的情况下,即使流量的增加它也不会成为瓶颈。 任何节点都可以成为主节点。我们的示例集群就只有一个节点,所以它同时也成为了主节点。

作为用户,我们可以将请求发送到集群中的任何节点 ,包括主节点。 每个节点都知道任意文档所处的位置,并且能够将我们的请求直接转发到存储我们所需文档的节点。 无论我们将请求发送到哪个节点,它都能负责从各个包含我们所需文档的节点收集回数据,并将最终结果返回給客户端。 Elasticsearch 对这一切的管理都是透明的。

3、路由计算:

当索引一个文档的时候,文档会被存储到一个主分片中。 Elasticsearch 如何知道一个文档应该存放到哪个分片中呢?当我们创建文档时,它如何决定这个文档应当被存储在分片1 还是分片 2 中呢?首先这肯定不会是随机的,否则将来要获取文档的时候我们就不知道从何处寻找了。实际上,这个过程是根据下面这个公式决定的:
在这里插入图片描述
routing 是一个可变值,默认是文档的 _id ,也可以设置成一个自定义的值。 routing 通过hash 函数生成一个数字,然后这个数字再除以 number_of_primary_shards (主分片的数量)后得到余数 。

这个分布在 0到number_of_primary_shards-1 之间的余数,就是我们所寻求的文档所在分片的位置。这就解释了为什么我们要在创建索引的时候就确定好主分片的数量 并且永远不会改变这个数量:因为如果数量变化了,那么所有之前路由的值都会无效,文档也再也找不到了。

所有的文档 API( get 、 index 、 delete 、 bulk 、 update 以及 mget )都接受一个叫做 routing 的路由参数 ,通过这个参数我们可以自定义文档到分片的映射。一个自定义的路由参数可以用来确保所有相关的文档——例如所有属于同一个用户的文档——都被存储到同一个分片中。

4、倒排索引:

什么是倒排索引?倒排索引也叫反向索引,我们通常理解的索引是通过key寻找value,与之相反,倒排索引是通过value寻找key,故而被称作反向索引。

下面我们用一个简单的例子描述一下倒排索引的作用过程:

假如现在有三份数据文档,内容分别是:
在这里插入图片描述为了创建索引,ES引擎通过分词器将每个文档的内容拆成单独的词(称之为词条,或term),再将这些词条创建成不含重复词条的排序列表,然后列出每个词条出现在哪个文档,结果如下页所示:
在这里插入图片描述
这种结构由文档中所有不重复的词的列表构成,对于其中每个词都有至少一个文档与之关联。这种由属性值来确定记录的位置的结构就是倒排索引,带有倒排索引的文件被称为倒排文件

将上表转为更直观的图片来展示倒排索引:
在这里插入图片描述
其中,几个核心术语需要着重理解:
词条(term):索引里面最小的存储和查询单元,对于英文来说是一个词,对于中文来说一般指分词后的一个词。
词典(Term Dictionary):也叫字典,是词条的组合。搜索引擎的通常索引单位是单词,单词词典是文档集合中出现过的所有单词构成的字符串集合,单词词典内每条索引项记载单词本身的一些信息以及指向倒排索引的指针。
倒排表(Post list):一个文档通常由多个词组成,倒排表记录的是某个词在哪些文档里出现过及出现的位置。每个记录称为一个倒排项(Posting),倒排表记录的不单单是文档编号,还记录了词频等信息。
倒排文件(Inverted File):所有单词的倒排列表往往顺序地存储在磁盘的某个文件里,这个文件被称之为倒排文件,倒排文件是存储倒排索引的物理文件。
词典和倒排表是 Lucene中很重要的两种数据结构,是实现快速检索的重要基石。词典和倒排文件是分两部分存储的,词典在内存中而倒排文件存储在磁盘

5、分词:

5.1、ES分词

前面,我们说了倒排索引的原理,我们需要构建一个单词词典,但是这个词典里面的数据怎么来呢?我们需要对输入的东西进行分词。这个ES已经考虑过了,所以它内置了一些分词器,但是中国文化,博大精深,有时候自己断句都会有误差,所以我们会用一些国人的插件进行中文分词。下面重点介绍ES分词原理、内置分词和中文分词。

5.2、ES分词是如何实现?

Analysis(分析)是通过Analyzer(分析器)实现的,分析也是有步骤的,下面我们说一下Analyzer的组成。

分词器主要由三部分组成:

  1. Character Filters 字符过滤器 比方说剔除html代码、特殊符号等等,可以有多个字符过滤器
  2. Tokenizer 分词器 对语句进行分词,只能有一个
  3. Token Filter token过滤器 对词进行过滤、或者转小写、等等,可以有多个token filter,依次执行
5.3、ES内置分词器分析

我们知道了分词器的组成,只需要再知道它的一些实现即可。我们也列出来方便查看

standard

默认的分词器,按词分类并且小写处理。这里我们举个例子,其余大家照葫芦画瓢就行
在这里插入图片描述
我这里是利用Kibana的dev tool进行api调试,大家也可以用postman等工具进行测试。ES提供_analyze api来测试分词。

5.4、ES指定分析器

举个例子按英文拆分,它支持不同的语言,例如:arabic, armenian, basque, bengali, bulgarian, catalan, czech, dutch, english, finnish, french, galician, german, hindi, hungarian, indonesian, irish, italian, latvian, lithuanian, norwegian, portuguese, romanian, russian, sorani, spanish, swedish, turkish.

在这里插入图片描述
上面例子典型对中文就不太友好,中文分词要比英文分词难,英文都以空格分隔,中文理解通常需要上下文理解才能有正确的理解,比如 [苹果,不大好吃]和[苹果,不大,好吃],这两句意思就不一样。

5.5、IK分词器

前面的结果显然不符合我们的使用要求,所以我们需要下载 ES 对应版本的中文分词器。

我们这里采用 IK 中文分词器,下载地址为: https://github.com/medcl/elasticsearch-analysis-ik/releases/tag/v7.8.0

将解压后的后的文件夹放入 ES 根目录下的 plugins 目录下,重启 ES 即可使用。

我们这次加入新的查询参数"analyzer":“ik_max_word”
在这里插入图片描述

6、Kibana:

Kibana 是一个免费且开放的用户界面,能够让你对 Elasticsearch 数据进行可视化,并让你在 Elastic Stack 中进行导航。你可以进行各种操作,从跟踪查询负载,到理解请求如何流经你的整个应用,都能轻松完成。

Linux(CentOS)下载安装Kibana参考前面的博客即可:https://blog.csdn.net/sxdtzhaoxinguo/article/details/129057179

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

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

相关文章

能源消耗监测管理系统,在建筑节能中起到哪些重要作用?

能源是一切活动的基础更是社会经济发展的命脉,但随着经济的建设,能源资源的消耗也越来越大,其中建筑是最大的消耗者。水、电、气等能源的消耗量逐年增长,这种能源并不是取之不尽用之不竭的,能源的日益紧张和环境恶化&a…

IM即时通讯开发MQ消息队列

消息是互联网信息的一种表现形式,是人利用计算机进行信息传递的有效载体,比如即时通讯网坛友最熟悉的即时通讯消息就是其具体的表现形式之一。 消息从发送者到接收者的典型传递方式有两种: 1)一种我们可以称为即时消息&#xff1a…

【FATE联邦学习】Fateboard的使用

fateboard文档 https://fate.fedai.org/fateboard/ github Fateboard文档 https://github.com/FederatedAI/FATE-Board/blob/master/README-CN.md 背景 Fateboard是FATE框架的任务看板。 在配置FATE时,Fateboard一般是被安装好了的,安装过程查看这里 A…

你知道如何获取全国省市街道区域信息吗?

随着互联网和快递行业的飞速发展,在中国广袤的大地上,全国行政区域规划星罗棋布,要查询一个行政单元如果不运用科技的手段查询可是非常的不易,现在,全国行政区划查询API的作用越来越大,它可以帮助我们对地址…

比特数据结构与算法(第四章_下)二叉树OJ(力扣:144,965,104,226,100,572)

144. 二叉树的前序遍历难度简单给你二叉树的根节点 root ,返回它节点值的 前序 遍历。示例 1:输入:root [1,null,2,3]输出:[1,2,3]示例 2:输入:root [ ]输出:[ ]示例 3:输入&#…

【react】react18的学习

一、安装 $ create-react-app [Project name]默认支持sass 二、核心依赖 react:react 核心 react-dom:用于开发渲染web 应用; react-scripts:封装webpack服务; "start": "react-scripts start&quo…

网络应用之html 的基本结构

html 的基本结构学习目标能够写出html的基本结构1. 结构代码<!DOCTYPE html><html><head><metacharset"UTF-8"><title>网页标题</title></head><body>网页显示内容</body></html>第一行<!DOCTYPE ht…

认识Cesium旋转大小变量

前文代码中有如下&#xff1b;矩阵乘以旋转大小&#xff0c;还放入mat&#xff1b; Cesium.Matrix4.multiply(mat, rotationX, mat); 初看以为rotationX是一个数值&#xff0c;因为矩阵可以和数相乘&#xff1b; 但是看它的代码&#xff0c;rotationX是由一长串代码获得的&a…

计算机网络高频知识点(二)

目录 一、三次握手 二、为什么是三次握手而不是两次握手 三、四次挥手 四、挥手为什么需要四次 五、websocket 1、是什么 2、原理 3、websocket与http的关系 4、特点 六、http结构 七、HTTP头都有哪些字段 八、http1.0和http1.1&#xff0c;还有http2有什么区别 九…

同样做软件测试,和月薪30K 的学弟聊了一晚上,我心态崩了...

过去的一年&#xff0c;你攒到钱了吗&#xff1f; 在一条话题为“今年你存了多少钱”的微博下&#xff0c;网友们贡献了近 3000 条“成绩单”&#xff0c;大多数称自己没攒到钱&#xff0c;甚至负债累累。 攒钱&#xff0c;为什么就这么难呢&#xff1f; 工资水平赶不上房价…

TDengine | 03 | TDengine2.4.0监控部署

1 前提条件 1.1 服务 TDengine 集群已经部署并正常运行taosAdapter 已经安装并正常运行TDengine 集群 REST API 地址&#xff0c;如&#xff1a;http://tdengine:6041TDengine 集群认证信息&#xff0c;做监控用的用户名和密码 1.2 版本 Linux : Ubuntu 18.04.5 LTS TDengi…

MySQL主从复制+读写分离详细方案

MySQL主从复制读写分离详细方案一、MySQL主从复制1.1mysql的复制类型1.2mysql主从复制的工作过程1.3MySQL的四种同步方式1.3.1异步复制&#xff08;Async Replication&#xff09;1.3.2同步复制&#xff08;Sync Replication&#xff09;1.3.3半同步复制&#xff08;Semi-Sync …

2023上半年软考中/高级报名+学习备考+考试重点

软考是全国计算机技术与软件专业技术资格&#xff08;水平&#xff09;考试&#xff08;简称软考&#xff09;项目&#xff0c;是由国家人力资源和社会保障部、工业和信息化部共同组织的国家级考试&#xff0c;既属于国家职业资格考试&#xff0c;又是职称资格考试。 系统集成…

CentOS7.6快速安装Docker

快速安装 官网安装参考手册&#xff1a;https://docs.docker.com/install/linux/docker-ce/centos/ 确定你是CentOS7及以上版本,yum是在线安装! [rootVM-4-5-centos ~]# cat /etc/redhat-releaseCentOS Linux release 7.6.1810 (Core)接下来您只管自上向下执行命令即可&#x…

阿里云服务器ECS适用于哪些应用场景?

云服务器ECS具有广泛的应用场景&#xff0c;既可以作为Web服务器或者应用服务器单独使用&#xff0c;又可以与其他阿里云服务集成提供丰富的解决方案。 云服务器ECS的典型应用场景包括但不限于本文描述&#xff0c;您可以在使用云服务器ECS的同时发现云计算带来的技术红利。 阿…

【项目】实现对接京东财务余额管理页面

目录需求实现后端京东财务余额Controller京东财务余额Service前端index.vuejdbalance.jsapi/jdbalance.js效果需求 通过调京东财务余额接口&#xff0c;在项目中开发相应管理页面。 实现 后端 因为京东的接口返回值里面已经有分页的参数了&#xff0c;因此会和平常自己写分…

【竞赛/TPU】算能TPU编程竞赛总结

如果觉得我的分享有一定帮助&#xff0c;欢迎关注我的微信公众号 “码农的科研笔记”&#xff0c;了解更多我的算法和代码学习总结记录。或者点击链接扫码关注【竞赛/TPU】算能TPU编程竞赛总结 1 基础知识 1.1【Ubuntu】 Ubuntu操作系统中有很多不同的文件夹&#xff0c;每个…

论文阅读——FECANet:应用特征增强的上下文感知小样本语义分割网络

代码&#xff1a;NUST-Machine-Intelligence-Laboratory/FECANET (github.com) 文章地址&#xff1a;地址 文章名称&#xff1a;FECANet: Boosting Few-Shot Semantic Segmentation with Feature-Enhanced Context-Aware Network 摘要 Few-shot semantic segmentation 是学习…

4年经验之谈,什么是接口测试?怎样做接口测试?

一、什么是接口&#xff1f;【文末学习资源分享】赶紧嫖&#xff01;冲&#xff01;&#xff01;&#xff01;&#xff01; 接口测试主要用于外部系统与系统之间以及内部各个子系统之间的交互点&#xff0c;定义特定的交互点&#xff0c;然后通过这些交互点来&#xff0c;通过…

Nydus 在约苗平台的容器镜像加速实践

文 | 向申 约苗平台运维工程师 关注云原生领域 本文字数 9574阅读时间24分钟 本文是来自向申同学的分享&#xff0c;介绍了其在 K8s 生产环境集群部署 Nydus 的相关实践。 Nydus 是蚂蚁集团&#xff0c;阿里云和字节等共建的开源容器镜像加速项目&#xff0c;是 CNCF Dragon…