本章將和大家分享 Elasticsearch 的一些基本概念。話不多說,下麵我們直接進入主題。 一、什麼是Lucene Lucene是Apache的開源搜索引擎類庫,提供了搜索引擎的核心API。 1、Lucene的優勢:易擴展、高性能(基於倒排索引) 2、Lucene的缺點:只限於Java語言開發、 ...
本章將和大家分享 Elasticsearch 的一些基本概念。話不多說,下麵我們直接進入主題。
一、什麼是Lucene
Lucene是Apache的開源搜索引擎類庫,提供了搜索引擎的核心API。
1、Lucene的優勢:易擴展、高性能(基於倒排索引)
2、Lucene的缺點:只限於Java語言開發、學習曲線陡峭、不支持水平擴展
二、什麼是Elasticsearch
Elasticsearch(簡稱ES)是一個開源的,分散式的全文搜索和分析引擎。它可以幫助我們從海量數據中快速找到需要的內容。
1、Elasticsearch 是基於 Lucene 開發的,相比與Lucene,Elasticsearch具備以下優勢:支持分散式,可水平擴展;提供Restful介面,可被任何語言調用。
2、Elasticsearch 結合 Kibana、Logstash、Beats,也就是elastic stack(ELK)。被廣泛應用在日誌數據分析、實時監控等領域。
3、Elasticsearch 是 elastic stack(ELK)的核心,負責存儲、搜索、分析數據。
4、官網地址:https://www.elastic.co/cn/
三、什麼是elastic stack(ELK)
是以Elasticsearch為核心的技術棧,包括Beats、Logstash、Kibana、Elasticsearch。
四、正向索引和倒排索引
1、什麼是正向索引
正向索引:基於文檔id創建索引。查詢詞條時必須先找到文檔,而後判斷是否包含詞條。
傳統資料庫(如MySQL)採用正向索引,例如給下表(tb_goods)中的id創建索引:
這是我們傳統的正向索引,如果通過索引id去做檢索那效率就比較高,但是如果通過局部內容去做檢索那效率就比較差了。
2、什麼是文檔和詞條
文檔(document):每一條數據就是一個文檔
詞條(term):對文檔中的內容按照語義分詞,得到的詞語就是詞條
3、什麼是倒排索引
倒排索引:對文檔內容分詞,對詞條創建索引,並記錄詞條所在文檔的信息。查詢時先根據詞條查詢到文檔id,而後獲取到文檔。
Elasticsearch採用倒排索引:
文檔(document):每條數據就是一個文檔
詞條(term):文檔按照語義分成的詞語
例如:對 title 創建倒排索引
倒排索引在做存儲的時候,它是將文檔中的內容按照語義去分成不同的詞條,然後再按照詞條去做存儲,關聯文檔id,建立起倒排索引。
搜索過程如下:
倒排索引的搜索過程是經過兩次檢索的,第一次是根據用戶輸入內容的詞條去詞條列表中進行尋找,找到對應的文檔id,第二次則是拿著文檔id去找文檔。雖然經歷了兩次查找,但是每一次查找都是索引級別的查找,所以總體的查詢效率是比較高的。
五、基本概念
1、欄位(Field)
欄位:類似MySQL中的一個欄位。
2、文檔(Document)
文檔:一條數據,用json格式表示。Elasticsearch是面向文檔存儲的,可以是資料庫中的一條商品數據,一個訂單信息。文檔數據會被序列化為json格式後存儲在Elasticsearch中。
3、類型(Type)
類型:逐漸被弱化的概念,Type就像關係型資料庫MySQL中的表,如用戶表、商品表等。註意:在Elasticsearch7.x中,一個索引庫下只有一張表,建表時不能給表取表名,預設表名為_doc。
4、索引(Index)
索引:相同類型文檔的集合,類似MySQL資料庫中的表。(由於Elasticsearch7.x版本之後,就刪除了Type類型,預設Type就是_doc,不然ES中的索引庫更像是MySQL中資料庫的概念)
5、映射(Mapping)
映射:索引中文檔的欄位約束信息,類似表的結構約束
6、Query DSL
Query DSL:ES中提供了一種強大的檢索數據方式,這種檢索方式稱之為Query DSL(Domain Specific Language)。DSL是Elasticsearch提供的JSON風格的請求語句,用來操作Elasticsearch,實現CRUD。
7、分片(shard)
分片:可以將一個Index中的數據切分為多個shard,然後存儲到多台伺服器上,以增大一個Index可以存儲的數據量,加速檢索能力,提升系統性能。
8、副本(replica)
副本:與shard存儲的數據是相同的,起到備份作用。當shard發生故障時,可以從replica中讀取數據,保證系統不受影響。
9、節點(Node)
節點:單個Elasticsearch實例,一臺機器可以有多個節點。節點名稱預設隨機分配。
10、集群(Cluster)
集群:一組Elasticsearch實例,預設集群名稱為 elasticsearch 。
11、概念對比
MySQL | Elasticsearch | 說明 |
Table | Index | 索引(Index),就是文檔的集合,類似資料庫的表(Table)。(由於Elasticsearch7.x版本之後,就刪除了Type類型,預設Type就是_doc,不然ES中的索引庫更像是MySQL中資料庫的概念) |
Row | Document | 文檔(Document),就是一條條的數據,類似資料庫中的行(Row),文檔都是JSON格式。 |
Column | Field | 欄位(Field),就是JSON文檔中的欄位,類似資料庫中的列(Column)。 |
Schema | Mapping | 映射(Mapping)是索引中對文檔的約束,例如欄位類型約束,類似資料庫的表結構(Schema)。 |
SQL | DSL | ES中提供了一種強大的檢索數據方式,這種檢索方式稱之為Query DSL(Domain Specific Language)。DSL是Elasticsearch提供的JSON風格的請求語句,用來操作Elasticsearch,實現CRUD。 |
12、Elasticsearch與資料庫的關係
MySQL:擅長事務類型操作,可以確保數據的安全和一致性。
Elasticsearch:擅長海量數據的搜索、分析、計算。
13、 元數據(Document MetaData)
元數據:用於標註文檔的相關信息。
1)_index:文檔所在的索引名
2)_type:文檔所在的類型名,預設是_doc
3)_id:文檔唯一id
4)uid:組合id,由type和id組成
5)_source:文檔的原始json數據,可從這裡獲取每個欄位的內容
6)_all:整合所有欄位內容到該欄位,預設禁用
7)_score:得分
六、ES中的數據類型
1、核心數據類型
1)字元串類型:text(可分詞的文本)、keyword(精確值,例如:品牌、國家、ip地址)
2)數值類型:long、integer、short、byte、double、float、half_float、scaled_float
3)日期類型:date
4)布爾類型:boolean
5)二進位類型:binary
6)範圍類型:integer_range、float_range、long_range、double_range、date_range
2、複雜數據類型
1)數組類型:array
2)對象類型:object
3)嵌套類型:nested object
3、地理位置數據類型
1)geo_point
2)geo_shape
4、專用類型
1)記錄ip地址:ip
2)實現自動補全:completion
3)記錄分詞數:token_count
4)記錄字元串hash值:murmur3
此文由博主精心撰寫轉載請保留此原文鏈接:https://www.cnblogs.com/xyh9039/p/17842159.html
版權聲明:如有雷同純屬巧合,如有侵權請及時聯繫本人修改,謝謝!!!