實時的分佈式搜索和分析引擎——Elasticsearch

   Elasticsearch是一個基於Apache Lucene(TM)的開源搜索引擎。無論在開源還是專有領域,Lucene可以被認爲是迄今爲止最先進、性能最好的、功能最全的搜索引擎庫。

   但是,Lucene只是一個庫。想要使用它,你必須使用Java來作爲開發語言並將其直接集成到你的應用中,更糟糕的是,Lucene非常複雜,你需要深入瞭解檢索的相關知識來理解它是如何工作的。

   Elasticsearch也使用Java開發並使用Lucene作爲其核心來實現所有索引搜索的功能,但是它的目的是通過簡單的RESTful API來隱藏Lucene的複雜性,從而讓全文搜索變得簡單。

640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy

   不過,Elasticsearch不僅僅是Lucene和全文搜索,我們還能這樣去描述它:

  • 分佈式的實時文件存儲,每個字段都被索引並可被搜索

  • 分佈式的實時分析搜索引擎

  • 可以擴展到上百臺服務器,處理PB級結構化或非結構化數據

   而且,所有的這些功能被集成到一個服務裏面,你的應用可以通過簡單的RESTful API、各種語言的客戶端甚至命令行與之交互。

   Elasticsearch的主要應用場景有:

  • 它提供了強大的搜索功能,可以實現類似百度、谷歌等搜索。

  • 可以搜索日誌或者交易數據,用來分析商業趨勢、蒐集日誌、分析系統瓶頸或者運行發展等等。

  • 可以提供預警功能(持續的查詢分析某個數據,如果超過一定的值,就進行警告)。

  • 分析商業信息,在百萬級的大數據中輕鬆的定位關鍵信息。

640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy

   我們再來看看Elasticsearch的真實使用案例

  • 維基百科使用Elasticsearch來進行全文搜做並高亮顯示關鍵詞,以及提供search-as-you-type、did-you-mean等搜索建議功能。

  • 英國衛報使用Elasticsearch來處理訪客日誌,以便能將公衆對不同文章的反應實時地反饋給各位編輯。

  • StackOverflow將全文搜索與地理位置和相關信息進行結合,以提供more-like-this相關問題的展現。

  • GitHub使用Elasticsearch來檢索超過1300億行代碼。

  • 每天,Goldman Sachs使用它來處理5TB數據的索引,還有很多投行使用它來分析股票市場的變動。

   但是Elasticsearch並不只是面向大型企業的,它還幫助了很多類似DataDog以及Klout的創業公司進行了功能的擴展

640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy

   那Elasticsearch到底有哪些優點呢?

  1. Elasticsearch是分佈式的。不需要其他組件,分發是實時的,被叫做”Push replication”。

  2. Elasticsearch 完全支持 Apache Lucene 的接近實時的搜索。

  3. 處理多租戶(multitenancy)不需要特殊配置,而Solr則需要更多的高級設置。

  4. Elasticsearch 採用 Gateway 的概念,使得完備份更加簡單。

  5. 各節點組成對等的網絡結構,某些節點出現故障時會自動分配其他節點代替其進行工作。

640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy

   要了解Elasticsearch 首先就要弄清楚下面的幾個概念,這樣也不會對Elasticsearch 產生一些誤解:

1 近實時

   Elasticsearch 並不是一個標準的數據庫,它不像MongoDB,它側重於對存儲的數據進行搜索。因此要注意到它 不是 實時讀寫 的,這也就意味着,剛剛存儲的數據,並不能馬上查詢到。

   當然這裏還要區分查詢的方式,Elasticsearch 也有數據的查詢以及搜索,這裏的近實時強調的是搜索....

2 集羣

   在Elasticsearch 中,對用戶來說集羣是很透明的。你只需要指定一個集羣的名字(默認是elasticsearch),啓動的時候,凡是集羣是這個名字的,都會默認加入到一個集羣中。

   你不需要做任何操作,選舉或者管理都是自動完成的。

   對用戶來說,僅僅是一個名字而已!

3 節點

   跟集羣的概念差不多,Elasticsearch 啓動時會設置這個節點的名字,一個節點也就是一個Elasticsearch 得服務器。

   默認會自動生成一個名字,這個名字在後續的集羣管理中還是很有作用的,因此如果想要手動的管理或者查看一些集羣的信息,最好是自定義一下節點的名字。

640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy

4 索引

   索引是一類文檔的集合,所有的操作比如索引(索引數據)、搜索、分析都是基於索引完成的。

   在一個集羣中,可以定義任意數量的索引。

5 類型

   類型可以理解成一個索引的邏輯分區,用於標識不同的文檔字段信息的集合。但是由於Elasticsearch 還是以索引爲粗粒度的單位,因此一個索引下的所有的類型,都存放在一個索引下。這也就導致不同類型相同字段名字的字段會存在類型定義衝突的問題。

   在2.0之前的版本,是可以插入但是不能搜索;在2.0之後的版本直接做了插入檢查,禁止字段類型衝突。

6 文檔

   文檔是存儲數據信息的基本單元,使用json來表示。

7 分片與備份

   在Elasticsearch 中,索引會備份成分片,每個分片是獨立的lucene索引,可以完成搜索分析存儲等工作。

640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy

   現在是不是對Elasticsearch 的瞭解更深了一點?想不想實際使用一下?掃描下方二維碼或者點擊“閱讀原文”馬上去雲市使用Elasticsearch !

640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章