搜索引擎面面觀 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 核心概念 vs. db 核心概念

es db
index 數據庫
type 數據表
docuemnt 一行數據

以上是一個簡單的類比。

繼續閱讀

 

來源:“創享視界”,創享視界(creativeview.cn)是一個帶動全民顛覆八小時工作制,通過投稿把自己的創意智慧變現的方式創造被動收入,從而實現財務自由的平臺。我們相信,創新思維不僅有助於打造更出色的產品,還可以讓世界變得更美好,讓人人受益。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章