1. ES 基礎(chǔ)一網(wǎng)打盡
1.1 ES定義
1)ES=elaticsearch簡寫, Elasticsearch是一個開源的高擴(kuò)展的分布式全文檢索引擎宫盔,它可以近乎實時的存儲贝淤、檢索數(shù)據(jù)艳丛;本身擴(kuò)展性很好,可以擴(kuò)展到上百臺服務(wù)器涝登,處理PB級別的數(shù)據(jù)雄家。
2)Elasticsearch也使用Java開發(fā)并使用Lucene作為其核心來實現(xiàn)所有索引和搜索的功能,但是它的目的是通過簡單的RESTful API來隱藏Lucene的復(fù)雜性胀滚,從而讓全文搜索變得簡單趟济。
1.2 ES主要解決問題:
1)檢索相關(guān)數(shù)據(jù);
2)返回統(tǒng)計結(jié)果咽笼;
3)速度要快顷编。
1.3 ES工作原理
當(dāng)ElasticSearch的節(jié)點啟動后,它會利用多播(multicast)(或者單播剑刑,如果用戶更改了配置)尋找集群中的其它節(jié)點媳纬,并與之建立連接。這個過程如下圖所示:
1.4 ES核心概念
1)Cluster:集群施掏。
ES可以作為一個獨(dú)立的單個搜索服務(wù)器钮惠。不過,為了處理大型數(shù)據(jù)集七芭,實現(xiàn)容錯和高可用性素挽,ES可以運(yùn)行在許多互相合作的服務(wù)器上。這些服務(wù)器的集合稱為集群狸驳。
2)Node:節(jié)點预明。
形成集群的每個服務(wù)器稱為節(jié)點。
3)Shard:分片耙箍。
當(dāng)有大量的文檔時撰糠,由于內(nèi)存的限制、磁盤處理能力不足辩昆、無法足夠快的響應(yīng)客戶端的請求等窗慎,一個節(jié)點可能不夠。這種情況下卤材,數(shù)據(jù)可以分為較小的分片。每個分片放到不同的服務(wù)器上峦失。
當(dāng)你查詢的索引分布在多個分片上時扇丛,ES會把查詢發(fā)送給每個相關(guān)的分片尉辑,并將結(jié)果組合在一起,而應(yīng)用程序并不知道分片的存在卓练。即:這個過程對用戶來說是透明的襟企。
4)Replia:副本。
為提高查詢吞吐量或?qū)崿F(xiàn)高可用性顽悼,可以使用分片副本。
副本是一個分片的精確復(fù)制冰评,每個分片可以有零個或多個副本木羹。ES中可以有許多相同的分片,其中之一被選擇更改索引操作抛人,這種特殊的分片稱為主分片穷遂。
當(dāng)主分片丟失時,如:該分片所在的數(shù)據(jù)不可用時盅惜,集群將副本提升為新的主分片忌穿。
5)全文檢索。
全文檢索就是對一篇文章進(jìn)行索引屈芜,可以根據(jù)關(guān)鍵字搜索朴译,類似于mysql里的like語句眠寿。
全文索引就是把內(nèi)容根據(jù)詞的意義進(jìn)行分詞,然后分別創(chuàng)建索引盯拱,例如”你們的激情是因為什么事情來的” 可能會被分詞成:“你們“例嘱,”激情“拼卵,“什么事情“腋腮,”來“ 等token,這樣當(dāng)你搜索“你們” 或者 “激情” 都會把這句搜出來低葫。