ElasticSearch 菜鳥筆記 (一)ElasticSearch 入門簡介
前言
ElasticSearch 是一個高可用開源全文檢索和分析元件。提供儲存服務,搜尋服務,大資料準實時分析等。一般用於提供一些提供複雜搜尋的應用。
ElasticSearch 提供了一套基於restful風格的全文檢索服務元件。前身是compass,直到2010被一家公司接管進行維護,開始商業化,並提供了ElasticSearch 一些相關的產品,包括大家比較熟悉的 kibana、logstash 以及 ElasticSearch 的一些元件,比如 安全元件shield 。當前最新的EElasticSearch 版本為 5.1.1 ,比較應用廣泛的為2.X,直到 2016-12 推出了5.x 版本 ,將版本號調為 5.X 。這是為了和 kibana 和 logstash 等產品版本號進行統一 ElasticSearch 。
準實時:ElasticSearch 是一個準實時的搜尋工具,在一般情況下延時少於一秒。
特點
支援物理上的水平擴充套件,並擁有一套分散式協調的管理功能
2.操作簡單
i:單節點的ES,安裝啟動後,會預設建立一個名為elasticsearch的es叢集。如果在區域網中存在該clustr.name,會自動加入該叢集。形成一個ElasticSearch 叢集 。
ii:多節點ES,在同一個區域網內的ES服務,只需要配置為同一個clust.name 名稱即可成為
一個ES叢集。叢集能夠將同一個索引的分片,自動分佈到各個節點。並在高效的提供查詢服務的同時,自動協調每個節點的下線以及上線情況。
3.restful 風格的API
提供了一套關於索引以及狀態檢視的restful風格介面。至於什麼是Restful風格服務,請移步
對比Solr
Solr與ES都是基於java/lucence來做一套面向文件結構的Nosql結構的資料庫。
1.分散式
solr 分散式 需要結合zookeeper 來實現,ES 自身有相關分散式協調。
2.支援的資料結構
solr支援 xml json html 等多種資料結構,而ES 僅支援json這種結構。
3.效能
solr在新建索引時是IO阻塞的,所以如果在新建索引時同時進行搜尋這時候相比ES來的相對較快。所以在實時性上,ElasticSearch 相比還是更好的選擇。
對比MongoDB
MongoDB與ES都是一種Nosql結構的處理方式,故在這裡也進行一些比較
1.分散式
MongoDB支援副本集的叢集方式,而ES同樣支援分散式結構
2.資料結構
MongoDB支援json方式,這點與ES也是一樣。MongoDB同樣還支援 Grid 方式來存放多媒體文件,這點Es是不支援的。
3.事務性
在這點上MongoDB和ES倒是有點類似,都沒有對於強事務的支援。雖然MongoDB手冊中有兩階段的方式來支援多個文件的操作事務的支援,但是一般情況都好像沒有使用到。
從人的認知系統來說,總是傾向於的將一些未知和陌生的事物聯絡到自身已經有的知識系統上,或者例項化到實際生活中某個場景。我們會經常看到一些‘helloworld’程式結合生活中的例項來理解,也是這個道理。這裡為了我們更好的理解 ElasticSearch 這樣一個全文檢索的工具
聯絡到之前常用的關係型資料庫Mysql
基本概念
Index
定義:類似於mysql中的database。索引只是一個邏輯上的空間,物理上是分為多個檔案來管理的。
命名:必須全小寫
描述:因為本身ES是基於Lucene的,所以內部索引的本質上其實Lucene的索引構造方式,具體Lucene的 索
引檔案具體分為那幾個檔案,之前我在Lucene部分的有過介紹【http://blog.csdn.net/cfl20121314/article/details/46008203 】。
ES中index可能被分為多個分片【對應物理上的lcenne索引】,在實踐過程中每個index都會有一個相應的副
本。主要用來在硬體出現問題時,用來回滾資料的。這也某種程式上,加劇了ES對於記憶體高要求。
Type
定義:類似於mysql中的table,根據使用者需求每個index中可以新建任意數量的type。
Document
定義:對應mysql中的row。有點類似於MongoDB中的文件結構,每個Document是一個json格式的文字。
Mapping
更像是一個用來定義每個欄位型別的語義規範在mysql中類似sql語句,在ES中經過包裝後,都被封裝為友好的Restful風格的介面進行操作。這一點也是為什麼開發人員更願意使用ES或者compass這樣的框架而不是直接使用Lucene的一個原因。
Shards & Replicas
定義:能夠為每個索引提供水平的擴充套件以及備份操作。
描述:
Shards:在單個節點中,index的儲存始終是有限制,並且隨著儲存的增大會帶來效能的問題。為了解決這個問題,ElasticSearch提供一個能夠分割單個index到叢集各個節點的功能。你可以在新建這個索引時,手動的定義每個索引分片的數量。
Replicas:在每個node出現宕機或者下線的情況,Replicas能夠在該節點下線的同時將副本同時自動分配到其他仍然可用的節點。而且在提供搜尋的同時,允許進行擴充套件節點的數量,在這個期間並不會出現服務終止的情況。
預設情況下,每個索引會分配5個分片,並且對應5個分片副本,同時會出現一個完整的副本【包括5個分配的副本資料】。
言而總之,用一句話來總結下。ElasticSearch 是一個基於 lucence 可水平擴充套件的自動化近實時全文搜尋服務元件。
參考文件: