elasticsearch(以下簡稱es)是一款開源的搜索引擎,基於apach lucene。最近在做nlp的時候順便研究一下。
下面是官方列舉的術語解釋
Near Realtime
接近實時的查詢,通常情況下,延遲在1s以內
Cluster
一個集群由1個或者多個節點組成,這些節點提供整個數據和索引,性能來源於每個節點。一個集群有一個唯一的名字,默認為“elasticsearch”,
Node
一個node啟動的時候分配一個唯一的id(UUID),自動會加入名為“elasticsearch”的cluster,前提是網絡沒有問題,一個node只能加入一個集群。
Index
一個index是一些有相似特征的documents集合,比如有一個顧客類的index,一個生產類的index,有一個訂單類的index。index必須都是小寫的
Type
一個index可以定義出多個type,一個type是一個邏輯的類別或者分區,並且其語義完全取決於自己,一般而言一個type定義了包含多個fields的documents。
Document
一個document是可以被索引信息的基礎單元,盡管一個document在物理上是屬於index的,但事實上,一個document必須被索引或者分配到一個index里的type。
Shard&Replicas
一個index可以存儲大量的數據,並且超過單節點的限制。例如,單個index可能含有幾十億個documents,占據了1TB的磁盤空間,這就可能導致單個node可能沒有這么大的空間,或者在查詢的時候會很慢。
為了解決這個問題,es給出了shard的概念,將一個index拆分成多個部分。創建的index就可以申明shard的數量,每個shard都是擁有完整和獨立的index。
Sharding的兩個重要點:
1.shard允許你對大量數據做橫向切分
2.shard允許通過多個shards分布式並發的操作,從而提升性能和吞吐量
Shard是如何分布的以及多個它們的documents是如何被合並都由es管理,這些對使用者都是透明的。
關於容錯,es通過replica來解決,replica是index下的shard的副本。
Replicaing的兩個重要點:
1.提供了HA。需要提醒的是,replica和shard不應該在同一個node
2.搜索可以在所有的replica並發處理
你可以在創建的時候設置index的shard和replica數量,但是之后,你只能更改replica的數量,而不能更改shard的數量.
Es的默認配置為,5個shards和1個replica,如果你的cluster有兩個及以上的node,則一共有10個shards(5 primary shards,5 replica shards)
其他
Es的一個shard就是lucene的index
總結
邏輯上,index、type、documents作為namespace的存在,可以充分表現Restful風格的接口
物理上,index可以看做是數據庫中的庫,通過shard(類似partition)做HA和高並發
參考資料
//es官方介紹
https://www.elastic.co/guide/en/elasticsearch/reference/5.2/_basic_concepts.html