ElasticSearch简介之倒排索引

  1. 第二点必须准确吧,假如我搜索关键词电脑,结果搜索出来的结果是一些奇奇怪怪的东西,要是在这时候投屏怕不是会陷入社死的尴尬吧。

  2. 第三点对于我这种比较粗心的人还是需要有一点的容忍度,哪怕输错其中一个字,也可以给出相关的搜索结果。

  3. 第四点对于大部分人而言,相信大多数人都会希望进行搜索的时候可以有相关的搜索选项提供选择,而不是都是需要自己相办法去思考所有的关键词,毕竟人都是喜欢偷懒的,从某种程度上而言,人们的偷懒促进了现代社会的发展。

​ 说完这几点相信很多的搜索引擎都是奔着这几个目标去的,显而易见 ElasticSearch 满足了上面所有的搜索的基本要求,相信小白(包括我啦)到这里都很想去尝试一下,网上的安装教程和简单 HelloWorld 都是有的,可以自己使用单机版简单的玩耍一下,在这里就不一一赘述了。简单的 Demo 过后是不是很多人都好奇 ElasticSearch 搜索的具体实现方式是怎么实现的,是依靠什么满足上诉第一点的要求,那么开启接下来的里程吧。

倒排索引


抽象模型

​ 众所周知的是 ElastichSearch 使用的是 Lucene 来作为底层的框架来进行一个数据的搜索, Lucene 则是一个高性能的全文检索引擎工具,很多的搜索引擎都是以 Lucene 为工具包,进行二次开发,那么究竟是什么使得 Lucene 这个工具,具有如此的魅力,提到这个就不得不说一下他的一个独特数据结构-倒排索引了。

​ 接下来进入正式环节。在说倒排索引之前,先进行我们正常的思路是如何来对下列的数据进行一个检索的。

​ 普通按照我们正常的思路来进行一个全文的检索,就是使用一个遍历的方式来进行一个关键字的获取,比如我们要检索关键字 keyworld1 时就需要把所有的数据进行检索一编,当然在数据量小的时候这并没有什么影响,反而因为简单处理会速度比较快,没有那么多的性能问题,但是当数据量以百万或者千万级别以上进行的时候就不行了,这个时候遍历一下的速度是我们难以忍受的,如果要花很多的时间好像就没有人愿意进行一个等待了。

​ 为了解决这方面的问题就提出了倒排索引这个比较独特的数据结构,来解决相关的搜索性能问题:那么这种数据结构是怎么样的呢,首先我们给出一个抽象的示意图。

​ 倒排索引对刚进来的文档进行一个索引的构建,把一份文档中所有出现过的关键字放入一个列表中,这个列表被称为单词辞典也就是对应上图的绿色部分,而相对应的文档则是如右侧的红色节点所示,当然,对应的文档不一定是按照列表显示的,也可以选择其他的数据结构比如 B+ 树之类的,当然文档 1 ,这个节点并不是说就存储了相对应的文档,而是存储了这个文档的唯一标志 id ,通过这个 id 可以快速的定位文档的位置。除此之外还要可能红色节点存储了相应的出现的频次,这为后续的给出的排序提供了依据括号表示相应的频次,当然节点里面的数据不一定只有这么一点,肯定还是有很多其他的统计。 那么肯定会有人问如果是模糊搜索是怎么排序,那么肯定是检索绿色的这排,给出相关的文档,排序什么的是按照自己定义的一些规则来进行匹配,后续文章会给出相关性的算法。

​ 大致倒排索引的理论是这样子的,那么就给出相关的例子进行说明一下,以我们之前给出的 HelloWorld 版本进行说明 两个文档的 Json 如下

[

{

“id”: “2”,

“name”: “second Helloworld 2”,

“organizer”: “wangwu”,

“version”: “1.0”

},

{

“id”: “1”,

“name”: “ElasticSearch Helloworld”,

“organizer”: “qingtong”,

“version”: “1.0”

}

]

复制代码

​ ElasticSearch 会为了每一个字段建立一个倒排索引,那么我们以 name 这个字段的倒排索引为例:
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后

Java架构学习技术内容包含有:Spring,Dubbo,MyBatis, RPC, 源码分析,高并发、高性能、分布式,性能优化,微服务 高级架构开发等等。

还有Java核心知识点+全套架构师学习资料和视频+一线大厂面试宝典+面试简历模板可以领取+阿里美团网易腾讯小米爱奇艺快手哔哩哔哩面试题+Spring源码合集+Java架构实战电子书+2021年最新大厂面试题。
在这里插入图片描述

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!
1711967822000)]

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值