elasticsearch简介 搜索引擎全文搜索引擎

搜索引擎

为什么不用MySQL

我们开发的大部分企业级应用,其本质就是对数据的增删改查的包装,我们一般是分析业务的需求再在代码里面去写查询语句,这个语句一般就写死了,比如说你一个图书管理系统要查询已经有的书籍要查询一本书,这个功能已经写死了,比如说你搜索 “C++程序语言设计" 然后能得到一些数据,但是你颠倒顺序搜索"程序语言设计C++" MySQL的模糊查询就匹配不到数据了,用户还会玩出跟多花式的查询。另外模糊查询"like"是一个扫描全表的操作,如果是你的数据少还好,如果是你有千万数据,那MySQL的耗时是无法想象的,所以必须有一个新的东西来解决这个问题,就是搜索引擎

搜索引擎的分类

搜索引擎分为4类

  • 全文搜索引擎:这个是名副其实的搜索引擎,百度,Google就是全文搜索引擎(全文搜索引擎又可以通过数据来源的角度细分为2种)
    • 拥有自己的索引程序:使用爬虫spider爬取各个网页,建立自己的网页数据库,比如百度,google
    • 没有索引程序:租用其他搜索引擎的索引程序,比如lycos
  • 元搜索引擎:就是搜索引擎的整合,比如将百度,Google搜索的结果一起返回给用户
  • 目录搜索引擎:虚假的搜索引擎,通过目录分类的搜索,比如雅虎,新浪,网易搜索
  • 垂直搜索引擎:专业领域细分的搜索引擎,比如计算机领域搜索的东西都与计算机相关。

所以这里我们主要介绍名副其实的搜索引擎全文搜索引擎中的代表–elasticsearch

elasticsearch

Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。Elasticsearch用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。官方客户端在Java、.NET(C#)、PHP、Python、Apache Groovy、Ruby和许多其他语言中都是可用的。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr,也是基于Lucene。(这段文字是介绍elasticsearch的精髓,原谅我没有能力将它变得更短)

Lucene是一个基于java开发的开源全文搜索引擎的框架

image-20201124165455804
开发者的故事

开发者的名字叫做shay banon ,一天正在找工作的shay banon跟着他的妻子来到了伦敦,他的妻子想要做一个厨师,于是他就想帮他妻子做一个方便搜索菜谱的应用,然后他就以Lucene 为基础框架开发了他的第一个开源项目叫做"compass",后面重构为一个独立的服务叫做ElasticSearch

然后呢,现在ElasticSearch已经成为了世界上最受欢迎的企业级搜索引擎,

shay banon 的妻子依旧等待着她的食谱搜索…

elasticsearch vs solr

现在最火的开源全文搜索引擎有elasticsearch和solr,为什么我们选择elasticsearch?

这里是评测数据

(1)普通对已经有的数据进行搜索solr数据较快。

image-20201124170257127

(2)当建立索引的时候solr会发生IO阻塞,elasticsearch完成反超。

image-20201124171618346

(3)当数据量增加的时候elasticsearch没有显著变化,solr变的速度变得更低。

(4)下面是2004年到2020.11月的谷歌指数的全球热度随时间的变化

image-20201124171908796
谁在使用elasticsearch

image-20201124172018242

elasticsearch技术分析

倒排索引

倒排索引是全文检锁中最常用的数据结构,这里举个例子来理解倒排索引

这里有2篇文章

文章1: how is the weather today

文章2:it is a good weather

建立倒排索引

分词文章1文章2
howT
isTT
theT
wheatherTT
todayT
itT
aT
goodT

3.比如搜索 today weather 我们就得出包含today 或者 weather的文章

分词文章1文章2
todayT
weatherTT

两个文档都匹配,但是第一个文档比第二个匹配程度更高。如果没有别的条件,现在,这两个包含关键

字的文档都将返回,并且因为第一个匹配度比较高,所以优先级更高,我们放到前面(就像你谷歌搜索结果的优先级更高的会放到前面)

分布式集群

了解集群之前我们需要先了解es中基本的概念,这里对比MySQL方便理解

概念解释
索引(index)类似MySQL数据库
类型(type)类似MySQL中的表
字段(field)类似MySQL中的字段column
文档(doc)类似MySQL的数据(行)
节点(node)一台集群机器
切片(shard)一个索引分为多个索引,PS,RS(PS 是 primary shard 主切片 RS是 replica shard 副本切片)

分布式集群的搜索

  • 客户端向es服务端发送请求,请求到的节点为协调节点(绿色),
  • 协调节点通过对doc id 进行hash计算出这个文档在哪个分片,并自动负载均衡(这里访问机器1(节点1)的副分片3的结果是hash定位和负载均衡的结果)
  • 请求到机器1,副分片3上,然后返回值给协调节点,协调节点返回值给客户端

image-20201124195916365

集群的索引更新

  • 客户端发送请求到服务端,请求到的节点为协调节点(绿色)(同上)
  • 协调节点将更新doc请求转发路由到改doc所在分片的 主分片(例如主分片1)
  • primary shard主分片doc跟更新后,将数据同步到副本分片replica shard
  • 协调节点coordinating node 发现副本节点同步数据完毕就返回数据给客户端

image-20201124201053666

性能优化

elasticsearch的性能优化的方案有

1.设置合适的内存作为缓存

2.热点数据缓存常驻

3.分页优化

更多参考

万字长文,理解Elasticsearch和面试总结 - 21ic中国电子网

感慨:很多就读大学的人都感慨大学学的东西没有什么用,很多东西工作上用不到,比如说大学物理,微积分,线性代数 ,概率论,在工作中的使用的机会极少,大学学的东西没有什么用。


对,可能你学的那些大学的课程确实对你来说没什么用,但是至少有一件事情是有用的就是解决问题的能力,大学的课程其实也是一种解决问题能力课程,当然也不能否认教育和实践脱节现象,如何提高点你解决问题的能力呢?比如说搜索,搜索可以极大的提高你解决问题的能力。


搜索会极大程度的影响我们获取信息的效率,有的人能迅速在利用搜索找到自已想要的信息,比如你想知道如何在java中使用elasticsearch,比如你代码出了异常你想知道为什么异常,如何解决,有的人能通过搜索快速得到问题所在,有的人搜半天就搜不出来,我就是搜半天都搜不出来。工欲善其事,必先利其器,搜什么?哪里搜?怎么搜?搜索也是一门学问。

感谢阅读

– 半亩方塘

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

JarvanStack

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

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

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

打赏作者

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

抵扣说明:

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

余额充值