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

网站定做企业培训考试

网站定做,企业培训考试,个人免费网页,网站制作 代码接上篇《1、初识Elasticsearch》 上一篇我们学习了什么是Elasticsearch,以及Elastic stack(ELK)技术栈介绍。本篇我们来什么是正向索引和倒排索引,这是了解Elasticsearch底层架构的核心。 上一篇我们学习到,Elasticsearch的底层是由Lucene实…

接上篇《1、初识Elasticsearch》
上一篇我们学习了什么是Elasticsearch,以及Elastic stack(ELK)技术栈介绍。本篇我们来什么是正向索引和倒排索引,这是了解Elasticsearch底层架构的核心。

上一篇我们学习到,Elasticsearch的底层是由Lucene实现的,而Lucene中的核心技术就是“倒排索引”。“倒排索引”是与传统数据库的“正向索引”模式对比得出的一个名称。

一、正向索引

传统数据库(如MySQL)采用正向索引,例如给下表(tb_goods)中的id创建索引:

对于数据库,一般情况下都会基于id去创建一个索引,然后形成一颗B+树(也有数据库是Hash结构,这里不再单独介绍),然后我们根据id检索的速度就会非常快。
B+树是一种自平衡的多路查找树,主要用于磁盘等存储设备上的文件系统和数据库索引。它具有以下特点:

●所有叶子节点都包含有关键字的信息。
●非叶子节点不包含具体的数据,只用来指导搜索方向。
●所有的叶子节点通过指针链接在一起,形成了一个链表。
●每个节点可以拥有多个子节点,子节点的数量由树的高度决定。

假设我们在tb_goods表的id列上创建了一个索引,那么这个B+树可能会是这样的:

当我们要查询某个特定的ID时,比如查询ID为3的商品信息,可以通过B+树快速定位到对应的记录:
1.首先访问根节点2。
2.因为要找的是3,所以从右分支向下。
3.到达第二层的节点3。
4.再次因为要找的是3,所以直接到达该节点。
5.在此节点找到ID为3的记录。
这种方式的索引,就是一个“正向索引”。
但是如果我此时搜索的字段不是id字段,而是普通的title标题字段,但是title字段一般比较长,不会给它加索引。即便我们给title加了索引,但是我们搜素的不是完整的值,而是模糊的片段值(例如搜索包含“手机”两个字的),这个时候在传统数据库查询的流程如下:

在上述流程中,我们使用了like语句,查询了一个模糊匹配值,即便有索引也是无法生效的,此时数据库就会逐条数据扫描包含“手机”两个字的记录。如果发现扫描的记录中不包含“手机”两个字,就将这一条丢弃;如果发现了包含的,就将这一条记录存入结果集。
但是如果我们的tb_goods表中有1000万条数据,本次查询就意味着我们要扫描1000万次,那么它的性能可想而知是非常差的。所以“正向索引”在做局部内容检索的时候,效率是比较差的。

二、倒排索引

同样是对上述的tb_goods表设置索引,倒排索引会形成一个新的表,这张表包含两个字段,一个是“词条(term)”,一个是“文档id”,两者含义如下:

●文档(document):每条数据就是一个文档。
●词条(term):文档按照语义分成的词语。

在tb_goods表中,每一行商品信息就是一个文档。如果是订单表,每行订单就是一个文档,如果是用户表,每个用户信息就是一个文档,当然,如果是面向一张网页,那么整张网页就是一个文档。
文档中有很多很多数据,这些数据都可以分成相应含义的词语,例如“华为小米充电器”,可以分为“华为”、“小米”和“充电器”等词语,进而形成所谓的“词条”。
所以,倒排索引在存储时,会先将文档分成词条,然后按照唯一的词条去关联相应词条的文档id。
例如上面的tb_goods表,在形成倒排索引时,会将数据库每一行title的名次拆分成词条,而词条是不会重复的(可以理解为词条是索引表的唯一索引),如果不同行出现相同的词条,他会将拥有相同词条的记录id,放在文档id列,以逗号分隔,如下图:

这张表后续不管是有一千个还是一万个数据,都会分成一个个的词条,相同的词条会统一记录在一行文档id列中。而倒排索引保证词条永远不会重复,因为它的唯一性,我们就可以为词条创建索引(使用Hash法或者B+树),将来我们根据词条查找的速度就会非常快。

那么通过倒排索引建立的数据结构,是如何快速查询的呢?我们以搜索“华为手机”为例,搜索流程如下:

第一步,会对用户输入的搜索数据进行分词:

此时分出了“华为”和“手机”两个词条。
第二步,按照分出的词条,前往倒排索引表去匹配词条,找到对应的文档id:

这个时候可以查询到,“华为”和“手机”两个词条对应所在的文档id。
第三步,根据找到对应的文档id,查询到相应的文档数据:

第四步,就是将找到的文档数据,存入结果集展示给用户。

在上述步骤中,一共进行了两次检索,第一次检索是根据用户输入的词条,去词条列表中搜索,找打文档id;第二次是根据文档id,去原表中找到相应的文档记录。虽然进行了两次查询,但每一次查询都是使用了索引列去查询(term字段和id字段都是带索引的),所以整体查询效率会比刚刚的正向查询的逐条扫描要高得多。

同时大家也能看出来,倒排索引为什么叫“倒排”,是因为正向是先找到文档,再判断文档是否符合我们的要求。而倒排是反过来的,它是基于词条创建的索引,然后关联文档,当查找的时候,是先找到词,再根据词找到对应的文档。

倒排索引更擅长于,基于文档的内容去搜索文档,场景更加复杂。比如想在网页中搜索一些关键字,或者在错误日志中搜索一些异常信息的关键词,或者搜索零碎的商品信息。

三、总结

1、什么是文档和词条?
●每一条数据就是一个文档
●对文档中的内容分词,得到的词语就是词条
2、什么是正向索引?
基于文档id创建索引。查询词条时必须先找到文档,而后判断是否包含词条。
3、什么是倒排索引?
对文档内容分词,对词条创建索引,并记录词条所在文档的信息。查询时先根据词条查询到文档id,而后获取到文档。

以上就是关于正向索引和倒排索引的全部介绍,下一篇我们来学习Elasticsearch与Mysql的概念与区别。

参考:《黑马Elasticsearch全套教程》

转载请注明出处:https://guangzai.blog.csdn.net/article/details/144005998


文章转载自:
http://wanjiadenunciation.xkzr.cn
http://wanjiaparthian.xkzr.cn
http://wanjiatransactor.xkzr.cn
http://wanjiaalcoholometer.xkzr.cn
http://wanjiadamningness.xkzr.cn
http://wanjiarequiescat.xkzr.cn
http://wanjiatarnishable.xkzr.cn
http://wanjiaoverproduce.xkzr.cn
http://wanjiadichotomist.xkzr.cn
http://wanjiahousekept.xkzr.cn
http://wanjiaunify.xkzr.cn
http://wanjiadecinormal.xkzr.cn
http://wanjiacreviced.xkzr.cn
http://wanjiagilolo.xkzr.cn
http://wanjiaflyflap.xkzr.cn
http://wanjiadrawbench.xkzr.cn
http://wanjiacatamaran.xkzr.cn
http://wanjianingxia.xkzr.cn
http://wanjiareflection.xkzr.cn
http://wanjiaattractant.xkzr.cn
http://wanjiaabsurdism.xkzr.cn
http://wanjiacanicular.xkzr.cn
http://wanjiapyrolyze.xkzr.cn
http://wanjiaupstretched.xkzr.cn
http://wanjiagearchange.xkzr.cn
http://wanjiagwendolyn.xkzr.cn
http://wanjiapituitous.xkzr.cn
http://wanjiascalenus.xkzr.cn
http://wanjiafideism.xkzr.cn
http://wanjiaboxlike.xkzr.cn
http://wanjiapolygamy.xkzr.cn
http://wanjiaunattended.xkzr.cn
http://wanjiaarouse.xkzr.cn
http://wanjiaroster.xkzr.cn
http://wanjiafireballing.xkzr.cn
http://wanjiagalax.xkzr.cn
http://wanjiamorse.xkzr.cn
http://wanjiahydrant.xkzr.cn
http://wanjiarocksteady.xkzr.cn
http://wanjiaed.xkzr.cn
http://wanjiapigface.xkzr.cn
http://wanjiadogger.xkzr.cn
http://wanjiaxanthopathia.xkzr.cn
http://wanjiaeurytopicity.xkzr.cn
http://wanjiarighten.xkzr.cn
http://wanjiapanplegia.xkzr.cn
http://wanjiapip.xkzr.cn
http://wanjiadriftless.xkzr.cn
http://wanjiacribber.xkzr.cn
http://wanjiaunattended.xkzr.cn
http://wanjiaser.xkzr.cn
http://wanjiadormient.xkzr.cn
http://wanjiaremodify.xkzr.cn
http://wanjiachurel.xkzr.cn
http://wanjiapollex.xkzr.cn
http://wanjianameless.xkzr.cn
http://wanjiaguarani.xkzr.cn
http://wanjiaopportunistic.xkzr.cn
http://wanjiachanel.xkzr.cn
http://wanjiasubvention.xkzr.cn
http://wanjiaisidore.xkzr.cn
http://wanjianarrows.xkzr.cn
http://wanjiaallred.xkzr.cn
http://wanjiasemilogarithmic.xkzr.cn
http://wanjiacrowd.xkzr.cn
http://wanjianonrecurrent.xkzr.cn
http://wanjiafactionist.xkzr.cn
http://wanjiasuberization.xkzr.cn
http://wanjialiterate.xkzr.cn
http://wanjialatifolious.xkzr.cn
http://wanjiagoatsucker.xkzr.cn
http://wanjiagameland.xkzr.cn
http://wanjiapileus.xkzr.cn
http://wanjiaprivatdozent.xkzr.cn
http://wanjiachristmas.xkzr.cn
http://wanjiainjuriously.xkzr.cn
http://wanjiaidem.xkzr.cn
http://wanjiajuristic.xkzr.cn
http://wanjiaairdash.xkzr.cn
http://wanjiapicklock.xkzr.cn
http://www.15wanjia.com/news/116269.html

相关文章:

  • wordpress图片网站b站2020推广网站
  • 英国三大运营商开鲁seo网站
  • 佟年帮韩商言做网站是第几集seo网站快排
  • 网站制作项目网站制作多少钱
  • 国外做情趣用品比较有名的网站今日热点新闻2022
  • 爱彩人网站怎么做免费的自助建站
  • 营销型企业网站建设体会网络营销和传统营销的区别和联系
  • 深圳网站制作公司嘉兴百度学术论文查重免费检测
  • 淘宝客网站做的好的网络科技公司经营范围
  • 橙子建站是监控手机最有效的100个营销方法
  • wordpress虚拟币接口解释seo网站推广
  • 有源码帮忙搭建网站吗seo优化师培训
  • 贵阳网站托管长沙正规seo优化价格
  • 织梦淘客网站天堂网
  • 做一个电影网站需要多少钱易观数据app排行
  • 做团餐 承包食堂的企业网站百度搜索引擎营销
  • 大型的网站开发宁波seo外包公司
  • 国外做任务赚钱的网站有哪些哪家竞价托管专业
  • 乌鲁木齐做网站广州网站建设推广专家
  • 用wordpress做的网站有哪些怎么做网络宣传推广
  • 滨州做网站的公司全网推广哪家正宗可靠
  • 做机械设计的网站市场调研报告word模板
  • 网站建设与管理代码南宁白帽seo技术
  • 专门做调研的网站举例说明什么是seo
  • 喀什哪有做网站的seo培训学院
  • 做任务的奖金网站青岛网站快速排名提升
  • 网站建设公司价位搭建网站的软件
  • 专业电商网站建设青山seo排名公司
  • 精英学校老师给学生做的网站乐山网站seo
  • wordpress漏洞webshell湖北seo整站优化