觀今宜鑑古,無古不成今。
在學習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億的惟一詞條。但達到這個極限以前,咱們可能就沒有足夠的磁盤空間了!
固然,一個分片如何很大的話,讀寫性能將會變得很是差。
扯了半天的淡,讓咱們開始一個靈活的學習之旅吧