本章將和大家分享 Elasticsearch 的一些基本概念。話不多說,下面我們直接進入主題。
一、什么是Lucene
Lucene是Apache的開源搜索引擎類庫,提供了搜索引擎的核心API。
1、Lucene的優(yōu)勢:易擴展、高性能(基于倒排索引)
2、Lucene的缺點:只限于Java語言開發(fā)、學習曲線陡峭、不支持水平擴展
二、什么是Elasticsearch
Elasticsearch(簡稱ES)是一個開源的,分布式的全文搜索和分析引擎。它可以幫助我們從海量數(shù)據(jù)中快速找到需要的內容。
1、Elasticsearch 是基于 Lucene 開發(fā)的,相比與Lucene,Elasticsearch具備以下優(yōu)勢:支持分布式,可水平擴展;提供Restful接口,可被任何語言調用。
2、Elasticsearch 結合 Kibana、Logstash、Beats,也就是elastic stack(ELK)。被廣泛應用在日志數(shù)據(jù)分析、實時監(jiān)控等領域。
3、Elasticsearch 是 elastic stack(ELK)的核心,負責存儲、搜索、分析數(shù)據(jù)。
4、官網(wǎng)地址:https://www.elastic.co/cn/
三、什么是elastic stack(ELK)
是以Elasticsearch為核心的技術棧,包括Beats、Logstash、Kibana、Elasticsearch。
四、正向索引和倒排索引
1、什么是正向索引
正向索引:基于文檔id創(chuàng)建索引。查詢詞條時必須先找到文檔,而后判斷是否包含詞條。
傳統(tǒng)數(shù)據(jù)庫(如MySQL)采用正向索引,例如給下表(tb_goods)中的id創(chuàng)建索引:
這是我們傳統(tǒng)的正向索引,如果通過索引id去做檢索那效率就比較高,但是如果通過局部內容去做檢索那效率就比較差了。?
2、什么是文檔和詞條
文檔(document):每一條數(shù)據(jù)就是一個文檔
詞條(term):對文檔中的內容按照語義分詞,得到的詞語就是詞條
3、什么是倒排索引
倒排索引:對文檔內容分詞,對詞條創(chuàng)建索引,并記錄詞條所在文檔的信息。查詢時先根據(jù)詞條查詢到文檔id,而后獲取到文檔。
Elasticsearch采用倒排索引:
文檔(document):每條數(shù)據(jù)就是一個文檔
詞條(term):文檔按照語義分成的詞語
例如:對 title 創(chuàng)建倒排索引
倒排索引在做存儲的時候,它是將文檔中的內容按照語義去分成不同的詞條,然后再按照詞條去做存儲,關聯(lián)文檔id,建立起倒排索引。
搜索過程如下:
倒排索引的搜索過程是經(jīng)過兩次檢索的,第一次是根據(jù)用戶輸入內容的詞條去詞條列表中進行尋找,找到對應的文檔id,第二次則是拿著文檔id去找文檔。雖然經(jīng)歷了兩次查找,但是每一次查找都是索引級別的查找,所以總體的查詢效率是比較高的。
五、ES的基本概念
1、字段(Field)
字段:類似MySQL中的一個字段。
2、文檔(Document)
文檔:一條數(shù)據(jù),用json格式表示。Elasticsearch是面向文檔存儲的,可以是數(shù)據(jù)庫中的一條商品數(shù)據(jù),一個訂單信息。文檔數(shù)據(jù)會被序列化為json格式后存儲在Elasticsearch中。
3、類型(Type)
類型:逐漸被弱化的概念,Type就像關系型數(shù)據(jù)庫MySQL中的表,如用戶表、商品表等。注意:在Elasticsearch7.x中,一個索引庫下只有一張表,建表時不能給表取表名,默認表名為_doc。
4、索引(Index)
索引:相同類型文檔的集合,類似MySQL數(shù)據(jù)庫中的表。(由于Elasticsearch7.x版本之后,就刪除了Type類型,默認Type就是_doc,不然ES中的索引庫更像是MySQL中數(shù)據(jù)庫的概念)
5、映射(Mapping)
映射:索引中文檔的字段約束信息,類似表的結構約束
6、Query DSL
Query DSL:ES中提供了一種強大的檢索數(shù)據(jù)方式,這種檢索方式稱之為Query DSL(Domain Specific Language)。DSL是Elasticsearch提供的JSON風格的請求語句,用來操作Elasticsearch,實現(xiàn)CRUD。
7、分片(shard)
分片:可以將一個Index中的數(shù)據(jù)切分為多個shard,然后存儲到多臺服務器上,以增大一個Index可以存儲的數(shù)據(jù)量,加速檢索能力,提升系統(tǒng)性能。
8、副本(replica)
副本:與shard存儲的數(shù)據(jù)是相同的,起到備份作用。當shard發(fā)生故障時,可以從replica中讀取數(shù)據(jù),保證系統(tǒng)不受影響。
9、節(jié)點(node)
節(jié)點:單個Elasticsearch實例,一臺機器可以有多個節(jié)點。節(jié)點名稱默認隨機分配。
10、集群(cluster)
集群:一組Elasticsearch實例,默認集群名稱為 elasticsearch 。
11、概念對比
MySQL | ?Elasticsearch | ?說明 |
Table | ?Index | ?索引(Index),就是文檔的集合,類似數(shù)據(jù)庫的表(Table)。(由于Elasticsearch7.x版本之后,就刪除了Type類型,默認Type就是_doc,不然ES中的索引庫更像是MySQL中數(shù)據(jù)庫的概念) |
Row | ?Document | ?文檔(Document),就是一條條的數(shù)據(jù),類似數(shù)據(jù)庫中的行(Row),文檔都是JSON格式。 |
Column | ?Field | ?字段(Field),就是JSON文檔中的字段,類似數(shù)據(jù)庫中的列(Column)。 |
Schema | ?Mapping | ?映射(Mapping)是索引中對文檔的約束,例如字段類型約束,類似數(shù)據(jù)庫的表結構(Schema)。 |
SQL | ?DSL | ?ES中提供了一種強大的檢索數(shù)據(jù)方式,這種檢索方式稱之為Query DSL(Domain Specific Language)。DSL是Elasticsearch提供的JSON風格的請求語句,用來操作Elasticsearch,實現(xiàn)CRUD。 |
12、Elasticsearch與數(shù)據(jù)庫的關系
MySQL:擅長事務類型操作,可以確保數(shù)據(jù)的安全和一致性。
Elasticsearch:擅長海量數(shù)據(jù)的搜索、分析、計算。
13、?元數(shù)據(jù)(Document MetaData)
元數(shù)據(jù):用于標注文檔的相關信息。
1)_index:文檔所在的索引名
2)_type:文檔所在的類型名,默認是_doc
3)_id:文檔唯一id
4)_source:存儲原始文檔,文檔的原始json數(shù)據(jù),可從這里獲取每個字段的內容
5)_all:整合所有字段內容到該字段,默認禁用
6)_score:得分
7)_version:版本
8)_seq_no:順序號
六、ES中的數(shù)據(jù)類型
1、核心數(shù)據(jù)類型
1)字符串類型:text(可分詞的文本)、keyword(精確值,例如:品牌、國家、ip地址)
2)數(shù)值類型: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、復雜數(shù)據(jù)類型
1)數(shù)組類型:array
2)對象類型:object
3)嵌套類型:nested object
3、地理位置數(shù)據(jù)類型
1)geo_point
2)geo_shape
4、專用類型
1)記錄ip地址:ip
2)實現(xiàn)自動補全:completion
3)記錄分詞數(shù):token_count
4)記錄字符串hash值:murmur3
?
此文由博主精心撰寫轉載請保留此原文鏈接:https://www.cnblogs.com/xyh9039/p/17842159.html文章來源:http://www.zghlxwxcb.cn/news/detail-746974.html
版權聲明:如有雷同純屬巧合,如有侵權請及時聯(lián)系本人修改,謝謝?。?!文章來源地址http://www.zghlxwxcb.cn/news/detail-746974.html
到了這里,關于Elasticsearch 系列(二)- ES的基本概念的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!