Elasticsearch 是一個分布式翩剪、可擴展饿敲、開源的全文搜索與數(shù)據(jù)分析引擎疙挺。它可以存儲裳扯、搜索铜秆、分析 PB 級別的近實時數(shù)據(jù)誓琼。Elasticsearch 使用 Lucene 作為其核心來實現(xiàn)所有的索引和搜索功能拳亿,通過簡單的Restful API 隱藏 Lucene 的復(fù)雜性晴股,從而讓全文搜索變得簡單。
功能
Elasticsearch 主要有以下幾個功能:
1 結(jié)構(gòu)化搜索
結(jié)構(gòu)化搜索是指有關(guān)探詢那些具有內(nèi)在結(jié)構(gòu)數(shù)據(jù)的過程肺魁。比如日期电湘、時間和數(shù)字都是結(jié)構(gòu)化的:它們有精確的格式,我們可以對這些格式進(jìn)行邏輯操作。比較常見的操作包括比較數(shù)字或時間的范圍寂呛,或判定兩個值的大小怎诫。
文本也可以是結(jié)構(gòu)化的。如彩色筆可以有離散的顏色集合: 紅(red)
贷痪、 綠(green)
幻妓、 藍(lán)(blue)
。
在結(jié)構(gòu)化查詢中劫拢,我們得到的結(jié)果總是非是即否肉津,要么存于集合之中,要么存在集合之外舱沧。
2 全文搜索
全文搜索就是對一篇文章進(jìn)行索引妹沙,然后根據(jù)關(guān)鍵字搜索,類似于 mysql 里的 like 語句熟吏。
3 聚合
通過結(jié)構(gòu)化搜索和全文搜索距糖,如果我們有一個查詢并且希望找到匹配這個查詢的文檔集,就好比在大海撈針牵寺。而通過聚合悍引,我們會得到一個數(shù)據(jù)的概覽。我們需要的是分析和總結(jié)全套的數(shù)據(jù)而不是尋找單個文檔:
在大海里有多少針帽氓?
針的平均長度是多少趣斤?
按照針的制造商來劃分,針的長度中位值是多少黎休?
每月加入到海中的針有多少唬渗?
你最受歡迎的針的制造商是什么?
這里面有異常的針么奋渔?
優(yōu)缺點
優(yōu)點:
高可用,如果某些節(jié)點出現(xiàn)故障時會自動分配其他節(jié)點代替其進(jìn)行工作壮啊,并會把節(jié)點故障的數(shù)據(jù)復(fù)制到其它可用的節(jié)點上嫉鲸。
橫向擴展性,可以在不停機的情況下增加新的節(jié)點歹啼,以提高集群的容量和性能玄渗。
可以擴展到上百臺服務(wù)器,處理 PB 級別的結(jié)構(gòu)化和非結(jié)構(gòu)化數(shù)據(jù)狸眼。
缺點:
Elasticsearch 不支持 ACID 事務(wù)藤树,無法保證多個文檔處于同一個事務(wù)中。
Elasticsearch 的搜索是偽實時性的拓萌,默認(rèn)情況下岁钓,文檔從添加到對外可見能夠被搜到最少要1秒鐘。這么做是Lucene 為了提高寫操作的吞吐量而做出的延遲犧牲,當(dāng)然這個設(shè)置是可以手動調(diào)整的屡限,但是并不建議修改它品嚣,會極大地影響搜索性能。
mapping 不可變钧大,如果需要改變付出的代價十分高的翰撑。
默認(rèn)情況下,在寫入文檔時啊央,需要創(chuàng)建和刷新索引數(shù)據(jù)眶诈,所以寫入性能不高。更新和刪除操作時需要 merge 操作瓜饥,也會影響性能逝撬。
應(yīng)用場景
Elasticsearch 根據(jù)其特點有以下幾種場景:
站內(nèi)搜索:Elasticsearch 是一個強大的全文搜索引擎。
大數(shù)據(jù)的實時搜索压固、存儲球拦、統(tǒng)計。
監(jiān)控:統(tǒng)計帐我、日志等時序數(shù)據(jù)的存儲和分析坎炼、可視化。
參考文檔: