0


公司技术栈用到了Elasticsearch,我对此知识进行了回顾

前言:公司的技术栈用到了Elasticsearch搜索引擎,对这块知识点有所忘记,看了黑马的相关课程回顾了一下,对此方面知识做个总结,希望能够加深自己的印象以及帮助到其他的小伙伴儿们😉😉。
如果文章有什么需要改进的地方还请大佬不吝赐教👏👏。
小威在此先感谢各位大佬啦~~🤞🤞
在这里插入图片描述

🏠个人主页:小威要向诸佬学习呀
🧑个人简介:大家好,我是小威,一个想要与大家共同进步的男人😉😉
目前状况🎉:24届毕业生,曾经在某央企公司实习,目前在某税务公司实习👏👏

💕欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,我亲爱的大佬😘

以下正文开始
在这里插入图片描述

文章目录

Elasticsearch简单介绍

在这里插入图片描述

百度上介绍的Elasticsearch相当全面,参考之整理如下:

Elasticsearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎。它能很方便的使大量数据具有搜索、分析和探索的能力。充分利用Elasticsearch的水平伸缩性,能使数据在生产环境变得更有价值。

Elasticsearch 的实现原理主要分为以下几个步骤,首先用户将数据提交到Elasticsearch 数据库中,再通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据,当用户搜索数据时候,再根据权重将结果排名,打分,再将返回结果呈现给用户。

Elasticsearch是与名为Logstash的数据收集和日志解析引擎以及名为Kibana的分析和可视化平台一起开发的。这三个产品被设计成一个集成解决方案,称为“Elastic Stack”(以前称为“ELK stack”)。被广泛应用于日志数据分析,实时监控等领域。

Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。Elasticsearch是分布式的,这意味着索引可以被分成分片,每个分片可以有0个或多个副本。每个节点托管一个或多个分片,并充当协调器将操作委托给正确的分片。再平衡和路由是自动完成的。相关数据通常存储在同一个索引中,该索引由一个或多个主分片和零个或多个复制分片组成。一旦创建了索引,就不能更改主分片的数量。

Lucene是用Java语言写的一个搜索引擎类库,其实就是一个jar包,里面包含了搜索引擎的核心API,在使用的时候只需要导入这个jar包即可。当然,Lucene是可以扩展的,并且是高性能的(倒排索引数据结构,便于查询)。

Elasticsearch使用Lucene,并试图通过JSON和Java API提供其所有特性。它支持facetting和percolating,如果新文档与注册查询匹配,这对于通知非常有用。另一个特性称为“网关”,处理索引的长期持久性;例如,在服务器崩溃的情况下,可以从网关恢复索引。Elasticsearch支持实时GET请求,适合作为NoSQL数据存储,但缺少分布式事务。
在这里插入图片描述

倒排索引

Elasticsearch搜索引擎是基于Lucene的倒排索引实现的,索引的好处就是帮助我们快速检索到我们想要的数据。

首先先回顾一下正向索引:
一般我们的数据库表会有id字段,并且id字段会被设置为主键索引,当我们查询语句为select * from goods where id = ??? 此时查询会走索引(底层实现b+树),因此检索效率在数据比较多的情况下查询速度也是比较快的。
在这里插入图片描述

但是如果我们查询title列的每一行数据是否包含“手机”这一字段时,我们会用到模糊查询(即使title字段设置了索引,索引也不会生效)**select * from goods where title = %手机%**,此时会进行逐行扫描,判断每一行的title列是否包含“手机”。如果表中的行数比较多,此时逐行扫描所要花费的时间是相当长的,因此查询效率会显得非常非常慢!

对于全文检索的查询方式,倒排索引可以解决这一难题!

倒排索引用到的术语有:

文档:表中的每一条记录(数据)就是一个文档
词条:文档中按照语义划分成的词语就是词条
索引:相同类型的文档的集合
类型:表示数据结构,相当于表结构中描述字段的类型
映射:索引中文档的字段约束信息,类似于表的信息

在这里插入图片描述
对于以上的表,无论有多少条文档,我们都可以根据语义划分的词条,形成右边倒排索引的形式,如果文档中有重复词条出现,我们在右边记录文档的id即可。
比如我们作为用户,想要搜索华为手机,我们输入的词语会被分成“华为”和“手机”两个词条,之后会根据词条列表在倒排索引表中找到包含该词条的id,会再根据id再次查询:
在这里插入图片描述
倒排索引的过程经过了两次检索,首先通过用户的词条搜索文档id,之后会拿着文档id去文档中检索,找到合适的结果。由于两次检索都通过索引进行查询,所以查询效率比正向索引效率高很多。
正向索引是基于文档id查询词条,判断每条文档是否包含想要的词条;而倒排索引是通过对所有文档的内容进行分词,对词条创建索引,同时记录词条在文档中的位置。查询的时候先根据词条查询到文档的id,然后再通过文档id找到想要的文档,两次查询均走索引。

文档数据会被序列化为json格式存储在elasticsearch中,对于我们上面的数据,在elasticsearch中这样存储:
在这里插入图片描述
根据文档的类型,相同类型的文档会被划分到相同的索引库中。

  • 所有用户文档,就可以组织在一起,称为用户的索引;
  • 所有商品的文档,可以组织在一起,称为商品的索引;
  • 所有订单的文档,可以组织在一起,称为订单的索引;在这里插入图片描述在这里插入图片描述

MySQL和Elasticsearch对比

在MySQL中,我们对数据库实现增删改查是通过select,delect,update,insert等语句实现的。在Elasticsearch中,是通过DSL语句实现的crud,是一种json风格的请求语法,基于http请求发送,和语言无关。
在这里插入图片描述

MySQL:擅长事务类型(ACID)操作,可以确保数据的安全和一致性;
Elasticsearch:擅长海量数据的搜索,分析,计算(如商品,页面搜索)

在这里插入图片描述
Elasticsearch和数据库的关系为互补关系,数据库主要负责事务类型操作,Elasticsearch主要负责海量数据的搜索,分析计算等。

本篇文章就先分享到这里了,后续会继续分享其他方面的知识,感谢大佬认真读完支持咯~
在这里插入图片描述

文章到这里就结束了,如果有什么疑问的地方请指出,诸佬们一起讨论🍻
希望能和诸佬们一起努力,今后进入到心仪的公司
再次感谢各位小伙伴儿们的支持🤞

在这里插入图片描述


本文转载自: https://blog.csdn.net/qq_53847859/article/details/128858515
版权归原作者 小威要向诸佬学习呀 所有, 如有侵权,请联系我们删除。

“公司技术栈用到了Elasticsearch,我对此知识进行了回顾”的评论:

还没有评论