观今宜鉴古,无古不成今。
在学习elasticsearch以前,咱们要知道,elasticsearch是什么?为何要学习elasticsearch?以及用它能干什么?html
如今,你还离得开搜索吗?不管是Google仍是百度提供的搜索入口,仍是项目本身的搜索,好比QQ提供的搜索入口等等,都大大的方便了咱们的工做、生活。可是你有没有想过——搭建属于本身的搜索服务,应用于你的博客项目、公司项目……
不管你想不想,都要学习!由于随着公司业务的增加,数据也爆炸性增加。对于数据的处理、日志分析,若是还采用传统的方法,这恐怕是灾难性的。因此,咱们是时候学习一个先进的搜索引擎了。
Elasticsearch是一个基于Apache Lucene(TM)的开源搜索引擎。不管在开源仍是专有领域,Lucene能够被认为是迄今为止最早进、性能最好的、功能最全的搜索引擎库。
可是,Lucene只是一个库。想要使用它,你必须使用Java来做为开发语言并将其直接集成到你的应用中,更糟糕的是,Lucene很是复杂,你须要深刻了解检索的相关知识来理解它是如何工做的。
Elasticsearch也使用Java开发并使用Lucene做为其核心来实现全部索引和搜索的功能,可是它的目的是经过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。
你觉得这些就完了?elasticsearch除了Lucene和全文搜索,咱们还能够描述它:git
而且,这些功能都被集成到一个服务里面,elasticsearch也提供的与其它语言的接口,其中包括:程序员
使用咱们喜欢的语言经过RESTful API接口,访问9200端口,就能够与elasticsearch玩耍了。
上手elasticsearch很是容易,它提供了许多合理的缺省值,并对初学者隐藏了复杂的搜索引擎理论。它开箱即用(安装便可使用),只需不多的学习既可在生产环境中使用。
随着越学越深刻,还能够利用Elasticsearch更多高级的功能,整个引擎能够很灵活地进行配置。能够根据自身需求来定制属于本身的Elasticsearch。github
多年前,一个叫作Shay Banon的刚结婚不久的失业开发者,因为妻子要去伦敦学习厨师,他便跟着也去了。在他找工做的过程当中,为了给妻子构建一个食谱的搜索引擎,他开始构建一个早期版本的Lucene。
直接基于Lucene工做会比较困难,因此Shay开始抽象Lucene代码以便Java程序员能够在应用中添加搜索功能。他发布了他的第一个开源项目,叫作“Compass”。web
后来Shay找到一份工做,这份工做处在高性能和内存数据网格的分布式环境中,所以高性能的、实时的、分布式的搜索引擎也是理所固然须要的。而后他决定重写Compass库使其成为一个独立的服务叫作Elasticsearch。
第一个公开版本出如今2010年2月,在那以后Elasticsearch已经成为Github上最受欢迎的项目之一,代码贡献者超过300人。一家主营Elasticsearch的公司就此成立,他们一边提供商业支持一边开发新功能,不过Elasticsearch将永远开源且对全部人可用。
Shay的妻子依旧等待着她的食谱搜索……数据库
咱们知道,关系型数据库以记录和行的形式存储数据,可是在elasticsearch中,是以文档的形式存储数据。
但区别在于,文档要比数据表的行更加灵活。由于文档能够是多层次的,它(文档)鼓励你将属于一个逻辑实体的数据保存在同一个文档中,而不是散落在各个表的不一样行中。这样查询效率很高,由于咱们无需链接其余的表,咱们学习关系型数据库时,必定知道连表查询(尤为是链接多张表)是多么的费时吧!
咱们将在后续文章作更多的讲解。服务器
以前有人说,elasticsearch的缺点之一是没有成熟的案例加持,那咱们就来看看elasticsearch都有哪些成熟的案例:elasticsearch
可是Elasticsearch并不仅是面向大型企业的,它还帮助了不少相似DataDog以及Klout的创业公司进行了功能的扩展。
因此,elasticsearch能够灵活的应用于咱们的项目中。分布式
除了万能的百度和Google 以外,咱们还有一些其余的学习途径:ide
一个很好地问题,不幸的是,单一索引的极限取决于存储索引的硬件、索引的设计、如何处理数据以及你为索引备份了多少副本。
一般来讲,一个Lucene索引(也就是一个elasticsearch分片)不能处理多于21亿篇文档,或者多于2740亿的惟一词条。但达到这个极限以前,咱们可能就没有足够的磁盘空间了!
固然,一个分片如何很大的话,读写性能将会变得很是差。
扯了半天的淡,让咱们开始一个灵活的学习之旅吧