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

搜索引擎

为什么不用MySQL

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

搜索引擎的分类

搜索引擎分为4类

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

所以这里我们主要介绍名副其实的搜索引擎全文搜索引擎中的代表–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开发的开源全文搜索引擎的框架

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

开发者的故事

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

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

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

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

elasticsearch vs solr

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

这里是评测数据

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

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

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

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

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

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

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

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

谁在使用elasticsearch

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

elasticsearch技术分析

倒排索引

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

这里有2篇文章

文章1: how is the weather today

文章2:it is a good weather

建立倒排索引

分词 文章1 文章2
how T
is T T
the T
wheather T T
today T
it T
a T
good T

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

分词 文章1 文章2
today T
weather T T

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

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

分布式集群

了解集群之前我们需要先了解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上,然后返回值给协调节点,协调节点返回值给客户端

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

集群的索引更新

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

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

性能优化

elasticsearch的性能优化的方案有

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

2.热点数据缓存常驻

3.分页优化

更多参考

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

感谢阅读

– 半亩方塘