一、簡介
ElasticSearch是一個基於Lucene的搜索服務器。它提供了一個分布式多用戶能力的全文搜索引擎,基於RESTful web接口操作ES,也可以利用Java API。Elasticsearch是用Java開發的,並作為Apache許可條款下的開放源碼發布,是當前流行的企業級搜索引擎。設計用於雲計算中,能夠達到實時搜索,穩定,可靠,快速,安裝使用方便。
1、概念以及特點
1、Elasticsearch和MongoDB/Redis/Memcache一樣,是非關系型數據庫。
是一個接近實時的搜索平台,從索引這個文檔到這個文檔能夠被搜索到只有一個輕微的延遲,企業應用定位:采用Restful API標准的可擴展和高可用的實時數據分析的全文搜索工具。
2、可拓展:支持一主多從且擴容簡易,只要cluster.name一致且在同一個網絡中就能自動加入當前集群;本身就是開源軟件,也支持很多開源的第三方插件。
3、高可用:在一個集群的多個節點中進行分布式存儲,索引支持shards和復制,即使部分節點down掉,也能自動進行數據恢復和主從切換。
4、采用RestfulAPI標准:通過http接口使用JSON格式進行操作數據。
5、數據存儲的最小單位是文檔,本質上是一個JSON 文本:
官網:https://www.elastic.co/cn/what-is/elasticsearch
設計用途:用於分布式全文檢索
技術支持:通過HTTP使用JSON進行數據索引
二、產生
1、大規模數據如何檢索?
如:當系統數據量上了10億、100億條的時候,我們在做系統架構的時候通常會從以下角度去考慮問題:
1)用什么數據庫 ;(mysql、sybase、oracle、mongodb、hbase)
2)如何解決單點故障;(lvs、F5、A10、Zookeep、MQ)
3)如何保證數據安全性;(熱備、冷備、異地多活)
4)如何解決檢索難題;(數據庫代理中間件:mysql-proxy、Cobar、MaxScale)
5)如何解決統計分析問題;(離線、近實時)
2、傳統數據庫的應對解決方案
對於關系型數據,我們通常采用以下或類似架構去解決查詢瓶頸和寫入瓶頸:
1)通過主從備份解決數據安全性問題;
2)通過數據庫代理中間件心跳監測,解決單點故障問題;
3)通過代理中間件將查詢語句分發到各個slave節點進行查詢,並匯總結果

3、非關系型數據庫的解決方案
對於Nosql數據庫,以mongodb為例,其它原理類似:
1)通過副本備份保證數據安全性;
2)通過節點競選機制解決單點問題;
3)先從配置庫檢索分片信息,然后將請求分發到各個節點,最后由路由節點合並匯總結果
三、ES解決方案
為解決以上問題,從源頭着手分析,通常會從以下方式來尋找方法:
1、存儲數據時按有序存儲;
2、將數據和索引分離;
3、壓縮數據;
這就引出了Elasticsearch。
ES定義
ES=elaticsearch簡寫, Elasticsearch是一個開源的高擴展的分布式全文檢索引擎,它可以近乎實時的存儲、檢索數據;本身擴展性很好,可以擴展到上百台服務器,處理PB級別的數據。
Elasticsearch也使用Java開發並使用Lucene作為其核心來實現所有索引和搜索的功能,但是它的目的是通過簡單的RESTful API來隱藏Lucene的復雜性,從而讓全文搜索變得簡單。
Lucene與ES關系
1)Lucene只是一個庫。想要使用它,你必須使用Java來作為開發語言並將其直接集成到你的應用中,更糟糕的是,Lucene非常復雜,你需要深入了解檢索的相關知識來理解它是如何工作的。
2)Elasticsearch也使用Java開發並使用Lucene作為其核心來實現所有索引和搜索的功能,但是它的目的是通過簡單的RESTful API來隱藏Lucene的復雜性,從而讓全文搜索變得簡單。
ES主要解決問題:
1)檢索相關數據;
2)返回統計結果;
3)速度要快。
ES數據架構的主要概念

(1)關系型數據庫中的數據庫(DataBase),等價於ES中的索引(Index)
(2)一個數據庫下面有N張表(Table),等價於1個索引Index下面有N多類型(Type),
(3)一個數據庫表(Table)下的數據由多行(ROW)多列(column,屬性)組成,等價於1個Type由多個文檔(Document)和多Field組成。
(4)在一個關系型數據庫里面,schema定義了表、每個表的字段,還有表和字段之間的關系。 與之對應的,在ES中:Mapping定義索引下的Type的字段處理規則,即索引如何建立、索引類型、是否保存原始索引JSON文檔、是否壓縮原始JSON文檔、是否需要分詞處理、如何進行分詞處理等。
(5)在數據庫中的增insert、刪delete、改update、查search操作等價於ES中的增PUT/POST、刪Delete、改_update、查GET.
ES特點和優勢
1)分布式實時文件存儲,可將每一個字段存入索引,使其可以被檢索到。
2)實時分析的分布式搜索引擎。
分布式:索引分拆成多個分片,每個分片可有零個或多個副本。集群中的每個數據節點都可承載一個或多個分片,並且協調和處理各種操作;
負載再平衡和路由在大多數情況下自動完成。
3)可以擴展到上百台服務器,處理PB級別的結構化或非結構化數據。也可以運行在單台PC上
4)支持插件機制,分詞插件、同步插件、Hadoop插件、可視化插件等。
對比MYSQL
1、如果業務數據為結構化數據,同時不需要特別關注排名和智能分詞模糊匹配查詢等特性,則建議采用關系型數據庫如MySQL來作為數據存儲介質並使用配套搜索引擎
2、如果業務數據為非結構化數據,同時更關注排名和需要智能分詞模糊匹配的特性,則建議采用非關系型數據庫如ES作為數據存儲介質並使用配套搜索引擎。
3、MYSQL支持事務和訪問權限控制,ES不支持事務和訪問權限控制
4、ES在全文搜索、分詞、常規搜索、聚合統計方面性能高,ES團隊不建議完全采用ES作為數據庫,而是作為一個分布式搜索服務