什么是Elasticsearch?


1、什么是搜索?

2、如果用数据库做搜索会怎么样?

3、什么是全文检索、倒排索引和Lucene

4、什么是Elasticsearch

 

Elasticsearch(简称ES)是一个基于ApacheLucene(TM)的开源搜索引擎,无论在开源还是专有领域,Lucene可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库。

Elasticsearch简介

Elasticsearch是什么

Elasticsearch是一个基于ApacheLucene(TM)的开源搜索引擎,无论在开源还是专有领域,Lucene可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库。 

但是,Lucene只是一个库。想要发挥其强大的作用,你需使用Java并要将其集成到你的应用中。Lucene非常复杂,你需要深入的了解检索相关知识来理解它是如何工作的。 

Elasticsearch也是使用Java编写并使用Lucene来建立索引并实现搜索功能,但是它的目的是通过简单连贯的RESTfulAPI让全文搜索变得简单并隐藏Lucene的复杂性。 

不过,Elasticsearch不仅仅是Lucene和全文搜索引擎,它还提供:

  • 分布式的实时文件存储,每个字段都被索引并可被搜索
  • 实时分析的分布式搜索引擎
  • 可以扩展到上百台服务器,处理PB级结构化或非结构化数据

而且,所有的这些功能被集成到一台服务器,你的应用可以通过简单的RESTfulAPI、各种语言的客户端甚至命令行与之交互。上手Elasticsearch非常简单,它提供了许多合理的缺省值,并对初学者隐藏了复杂的搜索引擎理论。它开箱即用(安装即可使用),只需很少的学习既可在生产环境中使用。Elasticsearch在Apache2 license下许可使用,可以免费下载、使用和修改。 

随着知识的积累,你可以根据不同的问题领域定制Elasticsearch的高级特性,这一切都是可配置的,并且配置非常灵活。

以上内容来自 [百度百科]



Elasticsearch,分布式,高性能,高可用,可伸缩的搜索和分析系统

分布式一台机器承受不了的数据用多台机器进行实现

高性能:速度快

高可用:维护简单方便

可伸缩:扩容

 

1、什么是搜索?

 

百度:我们比如说想找寻任何的信息的时候,就会上百度去搜索一下,比如说找一部自己喜欢的电影,

     或者说找一本喜欢的书,或者找一条感兴趣的新闻(提到搜索的第一印象)

 

   百度 !=搜索,这是不对的

 

垂直搜索(站内搜索)

 

互联网的搜索:电商网站,招聘网站,新闻网站,各种app

IT系统的搜索:OA软件,办公自动化软件,会议管理,日程管理,项目管理,员工管理,搜索张三张三儿

张小三;有个电商网站,卖家,后台管理系统,搜索牙膏,订单,牙膏相关的订单

 

搜索,就是在任何场景下,找寻你想要的信息,这个时候,会输入一段你要搜索的关键字,然后就期望找到这个关键字相关的有些信息

 

2、如果用数据库做搜索会怎么样?

 

数据都是存储在数据库里面的,比如说电商网站的商品信息,招聘网站的职位信息,新闻网站的新闻信息,等等吧。所以说,很自然的一点,如果说从技术的角度去考虑,如何实现如说,电商网站内部的搜索功能的话,就可以考虑,去使用数据库去进行搜索。

 

1、比方说,每条记录的指定字段的文本,可能会很长,比如说商品描述字段的长度,有长达数千个,甚至数万个字符,这个时候,每次都要对每条记录的所有文本进行扫描,懒判断说,你包不包含我指定的这个关键词(比如说牙膏

2、还不能将搜索词拆分开来,尽可能去搜索更多的符合你的期望的结果,比如输入生化机,就搜索不出来生化危机

 

用数据库来实现搜索,是不太靠谱的。通常来说,性能会很差

 

3、什么是全文检索和Lucene

1)全文检索,倒排索引

 

 

 

2lucene,就是一个jar包,里面包含了封装好的各种建立倒排索引,以及进行搜索的代码,包括各种算法。我们就用java开发的时候,引入lucene jar,然后基于luceneapi进行去进行开发就可以了。用lucene,我们就可以去将已有的数据建立索引,lucene会在本地磁盘上面,给我们组织索引的数据结构。

另外的话,我们也可以用lucene提供的一些功能和api来针对磁盘上数据查找

4、什么是Elasticsearch



上图讲解:

假设有一个系统用lucene封装了搜索引擎的功能部署在单台机器上的假设磁盘就500个G的空间,假设现在数据量很大,有一个T的数据量,那这个时候在一台机器上是放不下的我们现在在弄一台机器 假设这台机器也有lucene  但是这个时候就会变成分布式,散落在多台机器上,

当电商网站前端搜索的比较复杂的时候,就会考虑我该从哪台服务器上获取数据,从哪里得到跟多套机器的通信就很麻烦我建立索引见到哪台服务器上呢还有就是保证数据不丢失,系统的高可用性

举例: 1t数据而一台服务器宕机了可能就会丢失数据

 

ES的功能特点及优点:

1.这个时候elaticsearch就应用而生  es上有很多个节点 每一个节点上都有lucene或者多个,我们可以建立es的集群  他创立的索引可能就是统一的一个地址我们只要发请求到es这个集群,这个时候他就会自己管理如何把数据均匀的存储在节点上存储,当检索请求发送来的时候他就会处理如何把请求分布到各个节点上去执行最后把所有的结果去汇总执行返回给客户端 避免了和多台机器复杂通信的过程

2.自己维护数据的冗余副本,比如一些机器宕机了不会丢失数据

3.封装了更多的高级功能,以给我们提供更多的支持,让我们快速的开发应用,开发更加复杂的应用

  :复杂的搜索功能,聚合分析的功能,基于地理位置的搜索(距离我10公里内的火锅店)