????????在應(yīng)用系統(tǒng)需要進行文本內(nèi)容檢索時蠕搜,這時不得不提到全文檢索怎茫。而全文檢索是將一個完整的信息源的全部內(nèi)容轉(zhuǎn)化為計算機可以識別、處理的信息單元而形成的數(shù)據(jù)集合妓灌。比較有名的全文檢索軟件有elasticsearch轨蛤、solr等。因為elasticsearch的易用性和在大數(shù)據(jù)量時不錯的性能優(yōu)勢虫埂,在工作中elasticsearch會使用比較多祥山。接下來介紹下elasticsearch基本概念,包括集群掉伏、節(jié)點缝呕、索引、類型斧散、文檔和分片和副本供常。理解這些概念是使用好elasticsearch的第一步,后文使用ES簡稱elasticsearch鸡捐。
? ? ?集群
????????一個ES集群可以由一個或者多個節(jié)點(nodes or servers)組成栈暇。所有這些節(jié)點用來存儲所有的數(shù)據(jù)以及提供聯(lián)合索引,為我們提供跨節(jié)點查詢的能力箍镜。一個ES集群的名稱是唯一的源祈,這個名稱非常重要煎源,因為一個節(jié)點(node)會通過這個名稱來判斷是否加入已有的集群。
? ? ?節(jié)點
? ??????一個ES實例就是一個node新博,一個機器可以有多個實例,所以并不能說一臺機器就是一個node脚草,大多數(shù)情況下每個node運行在一個獨立的環(huán)境或虛擬機上赫悄。節(jié)點用來存儲數(shù)據(jù),參與集群的索引以及提供搜索能力馏慨。當(dāng)某一網(wǎng)絡(luò)下啟動一定數(shù)量的ES節(jié)點時埂淮,節(jié)點可以通過指定集群名稱讓它加入某個集群。
? ? ?索引
? ? ? ? 一個索引是一組具有相似特性的文檔的集合写隶,比如可以為客戶數(shù)據(jù)(customer data)建立索引一個索引倔撞,也可以為產(chǎn)品目錄(product catalog)建立另一個索引,還可以為訂單數(shù)據(jù)(order data)建立另一個索引慕趴。一個索引由它的名稱唯一標(biāo)識(必須所有字母為小寫字母)痪蝇,這個名稱會在進行索引(indexing)、搜索(search)冕房、修改(update)和刪除(delete)操作的時候使用躏啰。ES中的索引類似于關(guān)系型數(shù)據(jù)庫中的database,下面是關(guān)系型數(shù)據(jù)庫和ES的概念關(guān)系:
? ? ?分片和副本
? ? ?分片(shard)
????????一個索引可能會存儲大量數(shù)據(jù)從而超過單個節(jié)點硬件的限制耙册。例如给僵,單個索引可能會有上億的文檔占用1TB的磁盤空間,這對于單個節(jié)點來說太大详拙,同時使用單個節(jié)點也會使搜索變慢帝际。為了解決這個問題,ES提供了一種分片(shard)能力饶辙,讓我們將一個索引切分成片蹲诀。當(dāng)我們創(chuàng)建一個索引時,我們可以為它指定分片的數(shù)量弃揽。每個分片自己都能獨立工作侧甫,存儲索引中的部分數(shù)據(jù),相當(dāng)于一桶水用了N個杯子裝蹋宦,而分片存在于集群的任一節(jié)點中披粟。每個分片對應(yīng)到底層都是一個Lucene Index,一個分片只能存放Integer.MAX_VALUE - 128 = 2,147,483,519 個docs冷冗。
? ? ? ? 之所以使用分片是因為分片可以水平分割或擴展內(nèi)容體量守屉,也可以以分布式和并行的方式在多個分片上進行操作(多個節(jié)點)從而提高性能和吞吐量。而一個分片是如何散發(fā)的蒿辙,如何將它的文檔聚合并返回個查詢是對用戶透明的拇泛,這個過程完全由ES來管理滨巴。
? ? ?副本
????????在網(wǎng)絡(luò)或云的環(huán)境下,錯誤可以在任何時候發(fā)生俺叭,當(dāng)一個分片或節(jié)點因為某種原因下線或消失時恭取,一個錯誤恢復(fù)機制就非常重要。為了解決這個問題熄守,ES讓我們可以為一個索引分片創(chuàng)建一個或多個拷貝蜈垮,這個拷貝稱作副本分片,簡稱為副本裕照。
? ? ? ? 副本重要性主要體現(xiàn)在下面兩個方面:
? ? ? ? 1攒发、當(dāng)一個分片或者節(jié)點出錯時,集群任然可用晋南。正因如此惠猿,我們會發(fā)現(xiàn)一個分片副本從來不會在它的原始分片或主分片所在的節(jié)點出現(xiàn)。
? ? ? ? 2负间、橫向擴展搜索體量和吞吐量偶妖,因為搜索可以在所有副本上并行執(zhí)行。
? ? ? ? 每個索引可以分為多個分片政溃,一個索引也可以被復(fù)制到零個或多個副本餐屎。一旦發(fā)生復(fù)制,每個索引都會有主分片(primary shards)和多個副本分片(replica shards)玩祟。分片數(shù)和副本數(shù)可以在一個索引創(chuàng)建時指定腹缩。當(dāng)索引創(chuàng)建以后,可以動態(tài)的改變副本數(shù)空扎,但是不能改變分片數(shù)藏鹊。默認情況下,每個ES索引都有5個主分片(primary shards)和1個副本(replica)转锈,也就是說當(dāng)我們的集群有兩個節(jié)點時盘寡,我們的索引會有5個主分片和另外5個副本分片,也就是說每個索引有總共10個分片撮慨。
? ? ?總結(jié)
????????本文為方便理解ES基本概念竿痰,主要介紹了集群、節(jié)點砌溺、分片和副本概念影涉,中間也包括了ES和關(guān)系數(shù)據(jù)庫概念比對,進一步加強對ES中idnexs规伐、docs等知識理解蟹倾,后續(xù)會帶來ES是如何實現(xiàn)全文檢索及其運行原理,敬請期待。? ? ? ?