lucene和elasticsearch的前世今生、elasticsearch的核心概念、elasticsearch核心概念 vs. 数据库核心概念(来自学习资料)
1、Lucene和elasticsearch的前世今生
? ? ? ?lucene,最先進、功能最強大的搜索庫,直接基于lucene開發,非常復雜,api復雜(實現一些簡單的功能,寫大量的java代碼),需要深入理解原理(各種索引結構)
? ? ? (1)分布式的文檔存儲引擎。
? ? ? (2)分布式的搜索引擎如分析引擎。
? ? ? (3)分布式,支持PB級數據。
? ? ? ? 開箱即用,優秀的默認參數,不需要 任何額外設置,完全開源。
? ? ? ? 關于elasticsearch的一個傳說,有一個程序員失業了,陪著自己老婆去英國倫敦學習廚師課程。程序員在失業期間想給老婆寫一個菜譜搜索引擎,覺得lucene實在太復雜了,就開發了一個封裝了lucene的開源項目,compass。后來程序員找到了工作,是做分布式的高性能項目的,覺得compass不夠,就寫了elasticsearch,讓lucene變成分布式的系統。
2、Elasticsearch的核心概念
? ? ? (1)Near Realtime (NRT):近實時,兩個意思,從寫入數據到數據可以被搜索到一個小延遲(大概1秒);基于ES執行搜索和分析可以達到秒級。
? ? ? (2)Cluster:集群,包含多個節點,每個節點屬于哪個集群是通過一個配置(集群名稱,默認是elasticsearch)來決定的,對于中小型應用來說,剛開始一個集群就一個節點很正常。? ? ? (3)Node:節點,集群中的一個節點,節點也有一個名稱(默認是隨機分配的),節點名稱很重要(在執行運維管理操作的時候),默認節點會去加入一個名稱為“elasticsearch”的集群,如果直接啟動一堆節點,那么它們會自動組成一個elasticsearch集群,當然一個節點也可以組成一個elasticsearch集群。
? ? ? (4)Dodument & field:文檔,ES中的最小數據單元,一個Document可以是一條客戶數據,一條商品分類數據,一條訂單數據,通常用JSON數據結構表示,每個index下的type中,都可以去存儲多個document。一個document里面有多個field,每個field就是一個數據字段。如下所示:
? ? ? ?product document
? ? ? ?{
? ? ? ? ? ?"product_id": "1",
? ? ? ? ? ?"product_name": "高露潔牙膏",
? ? ? ? ? ?"product_desc": "高效美白",
? ? ? ? ? ?"category_id": "2",
? ? ? ? ? ?"category_name": "日化用品"
? ? ? ? }
? ? ? (5)Index:索引,包含一堆有相似結構的文檔數據,比如可以有一個客戶索引,商品分類索引,訂單索引,索引有一個名稱。一個index包含很多document,一個index就代表了一類類似的或者相同的document。比如說建立一個product index,商品索引,里面可能就存放了所有的商品數據,所有的商品document。
? ? ? (6)Type:類型,每個索引里都可以有一個或多個type,type是index中的一個邏輯數據分類,一個type下的document,都有相同的field,比如博客系統,有一個索引,可以定義用戶數據type,博客數據type,評論數據type。
? ? ? ? 商品index,里面存放了所有的商品數據,商品document
? ? ? ? 但是商品分很多種類,每個種類的document的field可能不太一樣,比如說電器商品,可能還包含一些諸如售后時間范圍這樣的特殊field;生鮮商品,還包含一些諸如生鮮保質期之類的特殊field
? ? ? ? type,日化商品type,電器商品type,生鮮商品type
? ? ? ? 日化商品type:product_id,product_name,product_desc,category_id,category_name
? ? ? ? 電器商品type:product_id,product_name,product_desc,category_id,category_name,service_period? ? ? ? 生鮮商品type:product_id,product_name,product_desc,category_id,category_name,eat_period
每一個type里面,都會包含一堆document
{
? "product_id": "2",
? "product_name": "長虹電視機",
? "product_desc": "4k高清",
? "category_id": "3",
? "category_name": "電器",
? "service_period": "1年"
}
{
? "product_id": "3",
? "product_name": "基圍蝦",
? "product_desc": "純天然,冰島產",
? "category_id": "4",
? "category_name": "生鮮",
? "eat_period": "7天"
}
(7)shard:單臺機器無法存儲大量數據,es可以將一個索引中的數據切分為多個shard,分布在多臺服務器上存儲。有了shard就可以橫向擴展,存儲更多數據,讓搜索和分析等操作分布到多臺服務器上去執行,提升吞吐量和性能。每個shard都是一個lucene index。
(8)replica:任何一個服務器隨時可能故障或宕機,此時shard可能就會丟失,因此可以為每個shard創建多個replica副本。replica可以在shard故障時提供備用服務,保證數據不丟失,多個replica還可以提升搜索操作的吞吐量和性能。primary shard(建立索引時一次設置,不能修改,默認5個),replica shard(隨時修改數量,默認1個),默認每個索引10個shard,5個primary shard,5個replica shard,最小的高可用配置,是2臺服務器。
3、Elasticsearch核心概念 ? ?vs. ? ? 數據庫核心概念
Elasticsearch ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?數據庫
---------------------------------------------------------------------------
Document ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?行
Type ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?表
Index ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 庫
? ? ? ?
? ? ? ??
總結
以上是生活随笔為你收集整理的lucene和elasticsearch的前世今生、elasticsearch的核心概念、elasticsearch核心概念 vs. 数据库核心概念(来自学习资料)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2019crv混动后视镜如何折叠收回?
- 下一篇: MySQL 5.7.18的安装与主从复制