ElasticSearch底层实现原理

本章内容概述

1、9200端口号与9300端口号区别
2、elasticsearch倒排索引原理

1、9200端口号与9300端口号区别

	9300端口: ES节点之间通讯使用
	9200端口: ES节点 和 外部 通讯使用

	9300是TCP协议端口号,ES集群之间通讯端口号

在这里插入图片描述

	9200端口号,暴露ES RESTful接口端口号

在这里插入图片描述

在这里插入图片描述

	调用RESTful查看文档:http://192.168.34.64:9200/newcapec/user/1
{"_index":"newcapec","_type":"user","_id":"1","_version":2,"found":true,"_source":{
  "name":"jingerbo",
  "age" :28,
  "sex" :1
}
}

2、elasticsearch倒排索引原理

	索引就是关键词与网页文件之间的一种对应关系。所以就存在两种索引:正向索引和倒排索引。一般情况下搜索引擎中使用的是倒排索引
,但是很多人实际上并不理解什么叫倒排索引。

2.1 正向索引

	先来介绍—下正向索引。
	
	当用户进行査询时,如果对本地文件全面扫描用户所提交的关键词,"查询"的工作量就太大了,而且也是很消耗服务器资源的,所以搜索
引攀会把已经处理过的网页先进行索引,放到数据库中等待网民的搜索査询请求。

	一个网页被搜索引擎经过以上处理后,就只剩下能够体现网页主体内容的文本了,此时就可以对该网页进行索引了。正向索引指的是文件
对应关键词的形式,正向索引数据结构简化示意如下图。

在这里插入图片描述

	正排表是以文档的ID为关键字,表中记录文档中每个字的位置信息,查找时扫描表中每个文档中字的信息直到找出所有包含查询关键字的
文档。
	这种组织方法在建立索引的时候结构比较简单,建立比较方便且易于维护;因为索引是基于文档建立的,若是有新的文档加入,直接为该
文档建立一个新的索引块,挂接在原来索引文件的后面。若是有文档删除,则直接找到该文档号文档对应的索引信息,将其直接删除。但是在
查询的时候需对所有的文档进行扫描以确保没有遗漏,这样就使得检索时间大大延长,检索效率低下。    
 
	尽管正排表的工作原理非常的简单,但是由于其检索效率太低,除非在特定情况下,否则实用性价值不大。

2.2 倒排索引

	倒排表以字或词为关键字进行索引,表中关键字所对应的记录表项记录了出现这个字或词的所有文档,一个表项就是一个字表段,它记录
该文档的ID和字符在该文档中出现的位置情况。

	由于每个字或词对应的文档数量在动态变化,所以倒排表的建立和维护都较为复杂,但是在查询的时候由于可以一次得到查询关键字所对
应的所有文档,所以效率高于正排表。在全文检索中,检索的快速响应是一个最为关键的性能,而索引建立由于在后台进行,尽管效率相对低
一些,但不会影响整个搜索引擎的效率。

在这里插入图片描述

2.3 深入理解倒排索引

	文档(Document):一般搜索引擎的处理对象是互联网网页,而文档这个概念要更宽泛些,代表以文本形式存在的存储对象,相比网页来
说,涵盖更多种形式,比如Word,PDF,html,XML等不同格式的文件都可以称之为文档。再比如一封邮件,一条短信,一条微博也可以称之
为文档。在本书后续内容,很多情况下会使用文档来表征文本信息。

在这里插入图片描述

	文档集合(Document Collection):由若干文档构成的集合称之为文档集合。比如海量的互联网网页或者说大量的电子邮件都是文档集
合的具体例子。

	文档编号(Document ID):在搜索引擎内部,会将文档集合内每个文档赋予一个唯一的内部编号,以此编号来作为这个文档的唯一标识,
这样方便内部处理,每个文档的内部编号即称之为“文档编号”,后文有时会用DocID来便捷地代表文档编号。

	单词编号(Word ID):与文档编号类似,搜索引擎内部以唯一的编号来表征某个单词,单词编号可以作为某个单词的唯一表征。

在这里插入图片描述

	倒排索引(Inverted Index):倒排索引是实现“单词-文档矩阵”的一种具体存储形式,通过倒排索引,可以根据单词快速获取包含这个
单词的文档列表。倒排索引主要由两个部分组成:“单词词典”和“倒排文件”。

	单词词典(Lexicon):搜索引擎的通常索引单位是单词,单词词典是由文档集合中出现过的所有单词构成的字符串集合,单词词典内每条
索引项记载单词本身的一些信息以及指向“倒排列表”的指针。

	倒排列表(PostingList):倒排列表记载了出现过某个单词的所有文档的文档列表及单词在该文档中出现的位置信息,每条记录称为一个
倒排项(Posting)。根据倒排列表,即可获知哪些文档包含某个单词。

	倒排文件(Inverted File):所有单词的倒排列表往往顺序地存储在磁盘的某个文件里,这个文件即被称之为倒排文件,倒排文件是存
储倒排索引的物理文件。

	关于这些概念之间的关系,通过图可以比较清晰的看出来。

在这里插入图片描述

2.4 倒排索引案例解析

	倒排索引从逻辑结构和基本思路上来讲非常简单。下面我们通过具体实例来进行说明,使得读者能够对倒排索引有一个宏观而直接的感
受。
	假设文档集合包含五个文档,每个文档内容如图所示,在图中最左端一栏是每个文档对应的文档编号。我们的任务就是对这个文档集合
建立倒排索引。

在这里插入图片描述

	中文和英文等语言不同,单词之间没有明确分隔符号,所以首先要用分词系统将文档自动切分成单词序列。这样每个文档就转换为由单
词序列构成的数据流,为了系统后续处理方便,需要对每个不同的单词赋予唯一的单词编号,同时记录下哪些文档包含这个单词,在如此处理
结束后,我们可以得到最简单的倒排索引。

在这里插入图片描述

	在图中,“单词ID”一栏记录了每个单词的单词编号,第二栏是对应的单词,第三栏即每个单词对应的倒排列表。比如单词“谷歌”,其单
词编号为1,倒排列表为{1,2,3,4,5},说明文档集合中每个文档都包含了这个单词。

	之所以说上图所示倒排索引是最简单的,是因为这个索引系统只记载了哪些文档包含某个单词,而事实上,索引系统还可以记录除此之外
的更多信息。下图是一个相对复杂些的倒排索引,与上图的基本索引系统比,在单词对应的倒排列表中不仅记录了文档编号,还记载了单词频
率信息(TF),即这个单词在某个文档中的出现次数,之所以要记录这个信息,是因为词频信息在搜索结果排序时,计算查询和文档相似度是
很重要的一个计算因子,所以将其记录在倒排列表中,以方便后续排序时进行分值计算。在下图的例子里,单词“创始人”的单词编号为7,对
应的倒排列表内容为:(3:1),其中的3代表文档编号为3的文档包含这个单词,数字1代表词频信息,即这个单词在3号文档中只出现过1次
,其它单词对应的倒排列表所代表含义与此相同。

在这里插入图片描述

	实用的倒排索引还可以记载更多的信息,下图所示索引系统除了记录文档编号和单词频率信息外,额外记载了两类信息,即每个单词对应
的“文档频率信息”以及在倒排列表中记录单词在某个文档出现的位置信息。

在这里插入图片描述

		单词ID:记录每个单词的单词编号;
		单词:对应的单词;
		文档频率:代表文档集合中有多少个文档包含某个单词
		倒排列表:包含单词ID及其他必要信息
		DocId:单词出现的文档id
		TF:单词在某个文档中出现的次数
		POS:单词在文档中出现的位置

	“文档频率信息”代表了在文档集合中有多少个文档包含某个单词,之所以要记录这个信息,其原因与单词频率信息一样,这个信息在搜
索结果排序计算中是非常重要的一个因子。而单词在某个文档中出现的位置信息并非索引系统一定要记录的,在实际的索引系统里可以包含,
也可以选择不包含这个信息,之所以如此,因为这个信息对于搜索系统来说并非必需的,位置信息只有在支持“短语查询”的时候才能够派上用
场。

	以单词“拉斯”为例,其单词编号为8,文档频率为2,代表整个文档集合中有两个文档包含这个单词,对应的倒排列表为:{(3;1;<4>),
(5;1;<4>)},其含义为在文档3和文档5出现过这个单词,单词频率都为1,单词“拉斯”在两个文档中的出现位置都是4,即文档中第四个单词
是“拉斯”。

	上图所示倒排索引已经是一个非常完备的索引系统,实际搜索系统的索引结构基本如此,区别无非是采取哪些具体的数据结构来实现上述
逻辑结构。

	有了这个索引系统,搜索引擎可以很方便地响应用户的查询,比如用户输入查询词“Facebook”,搜索系统查找倒排索引,从中可以读出
包含这个单词的文档,这些文档就是提供给用户的搜索结果,而利用单词频率信息、文档频率信息即可以对这些候选搜索结果进行排序,计算
文档和查询的相似性,按照相似性得分由高到低排序输出,此即为搜索系统的部分内部流程。

2.5 总结

查询词“Facebook”,搜索系统查找倒排索引,从中可以读出
包含这个单词的文档,这些文档就是提供给用户的搜索结果,而利用单词频率信息、文档频率信息即可以对这些候选搜索结果进行排序,计算
文档和查询的相似性,按照相似性得分由高到低排序输出,此即为搜索系统的部分内部流程。

2.5 总结

	正排索引是从文档到关键字的映射(已知文档求关键字),倒排索引是从关键字到文档的映射(已知关键字求文档)。
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JTZ001

你的鼓励是我创作的最大动力?

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值