用最简单的话告诉你什么是ElasticSearch

介绍

Elasticsearch 是一个分布式可扩展的实时搜索和分析引擎,一个创建在全文搜索引擎 Apache Lucene(TM) 基础上的搜索引擎.固然 Elasticsearch 并不单单是 Lucene 那么简单,下面就介绍ElasticSearch为何是分布式的,可扩展,高性能,高可用。前端

什么是搜索

在咱们想知道一些信息时,就会使用一些搜索引擎来获取咱们想要的数据,好比搜索咱们喜欢的一款游戏,或者喜欢的一本书等等,这就是提到搜索的的第一印象,说直白点就是在任何场景下找寻你想要知道的信息,这就是搜索。算法

  • 如今的搜索也称为垂直搜索

垂直搜索引针对某一个行业的专业搜索引擎,好比说电商网站,新闻网站,各类app内部等等,他们都是搜索引擎的细分和延伸,在抽取出须要的数据进行处理后再以某种形式返回给用户。数据库

若是用数据库来作搜索会怎么样

例如咱们这里有一张商品表,如今咱们要搜索"衣服"这个关键字,,执行了 select * from products where product_name like %衣服%,(假设这里没有其余任何提高效率的设置)来进行搜索,或者进行其余字段的匹配,能够分析一下这个方式的缺点。服务器

  • 1,好比说,每条记录的指定字段的数据会很长,好比说“商品介绍”这个字段,可能会有几千或者几万个字符,那么搜索的时候就会去这些字符里面进行匹配是否包含要搜索的关键词。
  • 2,这种方式只能搜索到彻底包含“衣服”这个两个字符的记录,可是可能会有一些特殊的状况,某几条记录里面的“衣服”关键词并非连续的,可能衣服中间会插入某些字符,这个时候就搜索不出来这些记录了,可是这个商品又是咱们但愿搜索出来的,这个时候这种方式的弊端就十分明显了。

总的来讲用数据库来实现搜索是不太靠谱的,性能会不好。
app

什么是全文检索

首先须要了解什么是倒排索引?咱们这里先上一幅图,里面有4条记录。

如今将这4条记录的内容进行拆分红一些词条,这个过程叫作分词

如今咱们获得了这4条记录拆分出来词语,而后将这写词语放到一个列表中,并记录他们的ID,这个分析出来的就是 倒排索引

如今咱们输入 生化电影 这个关键词,这个时候搜素引擎将咱们输入的内容分词为 生化电影 这两个关键词,而后使用这个两个关键词去倒排索引里面匹配,发现包含 生化 这个关键词的记录有ID为 1,2,3,4这四条记录,包含 电影 这个关键词的有ID为1这条记录,因为ID为1这条记录已经被录入了,因此就被排除在外了, 这时候咱们就获得了想要ID为1234这4条记录,同理,若是咱们只输入 电影 这个关键词,那么符合条件的只有ID为1这条记录了。分布式

全文检索就是从拆分词语,存入倒排索引,而后分析用户输入的内容,在倒排索引里面进行匹配,这个过程就是全文检索。性能

什么是ElasticSearch

首先须要知道什么是lucene,lucene它就是一个Java的jar包,里面实现了倒排索引的算法和其余的全文检索相关的东西,ElasticSearch就是对lucene进行了封装,为何有lucene了还要ElasticSeaearch来干什么呢?首先,当数据量很大的时候,好比有1PB的数据,这个时候数据放在同一台机器上基本就不行了,那么把数据分开来放在多台机器上呢?那就变成分布式了,这个时候数据前端获取数据的时候到底去那一台机器上面去获取数据呢?这个时候就很麻烦了,若是某一台机器宕机了,那么这个机器上的数据就获取不到了,这也就没法保证高可用性了,还有数据存储的时候怎么到底存入那台机器等等,这些都须要人为的处理和维护。这个时候ElasticSearch就应运而生了,它就将lucene这些弊端给彻底解决了。网站

举例一些优势

  1. 高性能,自动维护数据分布到多个节点进行索引的创建,还有搜索请求分布到多个节点的执行。
  2. 高可用,自动维护数据的冗余副本,保证说,一些机器宕机了,不会形成数据的丢失。
  3. 封装了更多的高级功能,以给咱们提供更多的高级支持,让咱们快速的开发应用,开发更加复杂的应用,复杂的搜索功能,聚合分析的功能,基于地理位置的搜索(好比周围一千米内有几家咖啡厅)等等。
  4. 动态扩容,当咱们数据量急剧提高的时候,咱们只须要增长机器就好了,好比两台机器存放1.2T数据,那么没台机器存放就是600G,可是若是600G对于服务器的压力太大了,这个时候就须要增长第三台机器,让他们每人负责400G的数据,这个过程不须要人为的去分配,只须要将汲取加入集群中就自动完成。
相关文章
相关标签/搜索