Elasticsearch 是一个分布式可扩展的实时搜索和分析引擎,一个创建在全文搜索引擎 Apache Lucene(TM) 基础上的搜索引擎.固然 Elasticsearch 并不单单是 Lucene 那么简单,下面就介绍ElasticSearch为何是分布式的,可扩展,高性能,高可用。前端
在咱们想知道一些信息时,就会使用一些搜索引擎来获取咱们想要的数据,好比搜索咱们喜欢的一款游戏,或者喜欢的一本书等等,这就是提到搜索的的第一印象,说直白点就是在任何场景下找寻你想要知道的信息,这就是搜索。算法
垂直搜索引针对某一个行业的专业搜索引擎,好比说电商网站,新闻网站,各类app内部等等,他们都是搜索引擎的细分和延伸,在抽取出须要的数据进行处理后再以某种形式返回给用户。数据库
例如咱们这里有一张商品表,如今咱们要搜索"衣服"这个关键字,,执行了 select * from products where product_name like %衣服%,(假设这里没有其余任何提高效率的设置)来进行搜索,或者进行其余字段的匹配,能够分析一下这个方式的缺点。服务器
总的来讲用数据库来实现搜索是不太靠谱的,性能会不好。app
首先须要了解什么是倒排索引?咱们这里先上一幅图,里面有4条记录。
如今将这4条记录的内容进行拆分红一些词条,这个过程叫作分词
如今咱们获得了这4条记录拆分出来词语,而后将这写词语放到一个列表中,并记录他们的ID,这个分析出来的就是 倒排索引
如今咱们输入 生化电影 这个关键词,这个时候搜素引擎将咱们输入的内容分词为 生化 和 电影 这两个关键词,而后使用这个两个关键词去倒排索引里面匹配,发现包含 生化 这个关键词的记录有ID为 1,2,3,4这四条记录,包含 电影 这个关键词的有ID为1这条记录,因为ID为1这条记录已经被录入了,因此就被排除在外了, 这时候咱们就获得了想要ID为1234这4条记录,同理,若是咱们只输入 电影 这个关键词,那么符合条件的只有ID为1这条记录了。分布式
全文检索就是从拆分词语,存入倒排索引,而后分析用户输入的内容,在倒排索引里面进行匹配,这个过程就是全文检索。性能
首先须要知道什么是lucene,lucene它就是一个Java的jar包,里面实现了倒排索引的算法和其余的全文检索相关的东西,ElasticSearch就是对lucene进行了封装,为何有lucene了还要ElasticSeaearch来干什么呢?首先,当数据量很大的时候,好比有1PB的数据,这个时候数据放在同一台机器上基本就不行了,那么把数据分开来放在多台机器上呢?那就变成分布式了,这个时候数据前端获取数据的时候到底去那一台机器上面去获取数据呢?这个时候就很麻烦了,若是某一台机器宕机了,那么这个机器上的数据就获取不到了,这也就没法保证高可用性了,还有数据存储的时候怎么到底存入那台机器等等,这些都须要人为的处理和维护。这个时候ElasticSearch就应运而生了,它就将lucene这些弊端给彻底解决了。网站