1. 程式人生 > 其它 >ElasticSearch前世今生lucene

ElasticSearch前世今生lucene

技術標籤:es

lucene 和 es 的前世今生

lucene 是最先進、功能最強大的搜尋庫。如果直接基於 lucene 開發,非常複雜,即便寫一些簡單的功能,也要寫大量的 Java 程式碼,需要深入理解原理。

elasticsearch 基於 lucene,隱藏了 lucene 的複雜性,提供了簡單易用的 restful api / Java api 介面(另外還有其他語言的 api 介面)。

  • 分散式的文件儲存引擎
  • 分散式的搜尋引擎和分析引擎
  • 分散式,支援 PB 級資料

es 的核心概念

Near Realtime

近實時,有兩層意思:

  • 從寫入資料到資料可以被搜尋到有一個小延遲(大概是 1s)
  • 基於 es 執行搜尋和分析可以達到秒級

Cluster 叢集

叢集包含多個節點,每個節點屬於哪個叢集都是通過一個配置來決定的,對於中小型應用來說,剛開始一個叢集就一個節點很正常。

Node 節點

Node 是叢集中的一個節點,節點也有一個名稱,預設是隨機分配的。預設節點會去加入一個名稱為elasticsearch的叢集。如果直接啟動一堆節點,那麼它們會自動組成一個 elasticsearch 叢集,當然一個節點也可以組成 elasticsearch 叢集。

Document & field

文件是 es 中最小的資料單元,一個 document 可以是一條客戶資料、一條商品分類資料、一條訂單資料,通常用 json 資料結構來表示。每個 index 下的 type,都可以儲存多條 document。一個 document 裡面有多個 field,每個 field 就是一個數據欄位。

{
    "product_id": "1",
    "product_name": "iPhone X",
    "product_desc": "蘋果手機",
    "category_id": "2",
    "category_name": "電子產品"
}

Index

索引包含了一堆有相似結構的文件資料,比如商品索引。一個索引包含很多 document,一個索引就代表了一類相似或者相同的 ducument。

Type

型別,每個索引裡可以有一個或者多個 type,type 是 index 的一個邏輯分類,比如商品 index 下有多個 type:日化商品 type、電器商品 type、生鮮商品 type。每個 type 下的 document 的 field 可能不太一樣。

shard

單臺機器無法儲存大量資料,es 可以將一個索引中的資料切分為多個 shard,分佈在多臺伺服器上儲存。有了 shard 就可以橫向擴充套件,儲存更多資料,讓搜尋和分析等操作分佈到多臺伺服器上去執行,提升吞吐量和效能。每個 shard 都是一個 lucene index。

replica

任何一個伺服器隨時可能故障或宕機,此時 shard 可能就會丟失,因此可以為每個 shard 建立多個 replica 副本。replica 可以在 shard 故障時提供備用服務,保證資料不丟失,多個 replica 還可以提升搜尋操作的吞吐量和效能。primary shard(建立索引時一次設定,不能修改,預設 5 個),replica shard(隨時修改數量,預設 1 個),預設每個索引 10 個 shard,5 個 primary shard,5個 replica shard,最小的高可用配置,是 2 臺伺服器。

這麼說吧,shard 分為 primary shard 和 replica shard。而 primary shard 一般簡稱為 shard,而 replica shard 一般簡稱為 replica。

es-cluster-0

es 核心概念 vs. db 核心概念

esdb
index資料庫
type資料表
docuemnt一行資料

以上是一個簡單的類比。