什么是ElasticSearch?

什么是ElasticSearch?

 一,什么是搜索?

百度:我们比如说想找寻任何的信息的时候,就会去百度搜索一下,比如说找一部自己喜欢的电影,或者说找一本喜欢的书,或者找一条感兴趣的新闻(提到搜索的第一印象) 百度 = 搜索,这是不对的。

垂直搜索(站内搜索)

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

IT系统的搜索:OA软件,办公自动化的软件,会议管理,日程管理,项目管理,员工管理,搜索“张三”,“张三儿”,“张小三”;有个电商网站,卖家,后台管理系统,搜索“牙膏”,订单,“牙膏相关的订单”

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

二,如果用数据库做搜索会怎样

做软件开发的话,或者对IT,计算机有一定了解的话,都知道,数据都是存储在数据库里面的,比如说电商网站的商品信息,招聘网站的招聘信息,新闻网站的新闻信息,等等。所以说,很自然的一点,如果说从技术的角度去考虑,如何实现电商网站内部的搜索功能是话,就可以 开率去使用数据库去进行搜索。

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

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

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

三,什么是全文检索和Lucene?

(1) 全文检索,倒排索引

数据库里的数据一共有100万条,按照之前的思路,其实就要扫描100万次,而且每次扫描,都需要匹配那个文本所有的字符,确认是否包含搜索的关键词,而且不能将搜索词拆解开来进行检索

利用倒排索引,进行检索的话,假设100万条数据,拆分出来的词语,假设有1000万个词语,那么在倒排索引中,就有1000万行,我们可能并不需要搜索1000万次,很可能说,在搜索到第一次的时候,我们就可以找到搜索此对应的数据,也可能是100此,或者是1000次。

(2)Lucene,就是一个jar包,里面包含了封装好的各种简历倒排索引,以及进行搜索的代码,包括各种算法。我们就用java开发的时候,引入Lucene jar,然后基于Lucene的api去进行开发就可以了,用Lucene,我们就可以去将已有 的数据建立索引,Lucene会在本地磁盘上面,给我们组织索引的数据结构,另外的话,我们也可以用Lucene提供的一些功能和api来针对磁盘上的索引数据,进行搜索。

四,什么是Elasticsearch?

部署在单台机器上面的假设磁盘就500G的空间,数据量很大,有1T的数据量,那这个时候,在一台机器上,是放不下的,这个时候就分布散落在多台机器上。 但是前段和多台机器通信的方式就很麻烦。并且好需要保证数据的不丢失,系统的高可用性,数据的高可用性,如何高性能的建立索引,以及执行搜索。你如果说,数据量很大的话,超过了单台机器的承受范围,就必须得用多台机器去进行数据的存储和搜索,如果我们自己实现,很麻烦。 (1)自动维护数据的分布到多个节点的索引的建立,还有搜索请求分布到多个节点的执行

(2)自动维护数据的冗余副本,一些机器宕机了,不会丢失任何数据

(3)封装更多的高级功能,以给我们提供更多的高级支持,让我们快速的开发应用,开发更加复杂的应用,复杂的搜索功能,聚合分析分功能,基于地理位置的搜索(距离我当前位置1公里的火锅店)

你可能感兴趣的:(什么是ElasticSearch?)