深圳提供網(wǎng)站建設(shè)服務(wù)平臺(tái)武漢網(wǎng)站維護(hù)公司
目錄
1、初識(shí)elasticsearch
1.1、什么是elasticsearch
1.2.ELK技術(shù)棧
2、正向索引和倒排索引
2.1、正向索引
2.2、倒排索引
2.3、正向索引和倒排索引的區(qū)別
3、elasticsearch中的概念理解
3.1、文檔和字段
3.2、索引和映射
3.3、mysql與elasticsearch
1、初識(shí)elasticsearch
1.1、什么是elasticsearch
????????elasticsearch是一款非常強(qiáng)大的開源搜索引擎,具備非常多強(qiáng)大功能,可以幫助我們從海量數(shù)據(jù)中快速找到需要的內(nèi)容。
????????elasticsearch結(jié)合kibana、Logstash、Beats,也就是elastic stack(ELK)。被廣泛應(yīng)用在日志數(shù)據(jù)分析、實(shí)時(shí)監(jiān)控等領(lǐng)域。
架構(gòu):
????????Mysql:擅長(zhǎng)事務(wù)類型操作,可以確保數(shù)據(jù)的安全和一致性。
????????Elasticsearch:擅長(zhǎng)海量數(shù)據(jù)的搜索、分析、計(jì)算。
1.2.ELK技術(shù)棧
????????elasticsearch是elastic stack的核心,負(fù)責(zé)存儲(chǔ)、搜索、分析數(shù)據(jù)。
總結(jié):
????????什么是elasticsearch?
???????????????? 一個(gè)開源的分布式搜索引擎,可以用來實(shí)現(xiàn)搜索、日志統(tǒng)計(jì)、分析、系統(tǒng)監(jiān)控等功能
????????什么是elastic stack(ELK)?
??????????????? 是以elasticsearch為核心的技術(shù)棧,包括beats、Logstash、kibana、elasticsearch
????????什么是Lucene?
??????????????? 是Apache的開源搜索引擎類庫(kù),提供了搜索引擎的核心API
2、正向索引和倒排索引
2.1、正向索引
????????傳統(tǒng)數(shù)據(jù)庫(kù)(如MySQL)采用正向索引,例如給下表(tb_goods)中的id創(chuàng)建索引:
如果是根據(jù)id查詢,那么直接走索引,查詢速度非常快。
但如果是基于title做模糊查詢,只能是逐行掃描數(shù)據(jù),流程如下:
??????? (1)用戶搜索數(shù)據(jù),條件是title符合`"%手機(jī)%"`(索引失效)
??????? (2)逐行獲取數(shù)據(jù),比如id為1的數(shù)據(jù)
??????? (3)判斷數(shù)據(jù)中的title是否符合用戶搜索條件
??????? (4)如果符合則放入結(jié)果集,不符合則丟棄。回到步驟1
????????逐行掃描,也就是全表掃描,隨著數(shù)據(jù)量增加,其查詢效率也會(huì)越來越低。當(dāng)數(shù)據(jù)量達(dá)到數(shù)百萬時(shí),就是一場(chǎng)災(zāi)難。
2.2、倒排索引
倒排索引中有兩個(gè)非常重要的概念:
????????文檔(Document):用來搜索的數(shù)據(jù),其中的每一條數(shù)據(jù)就是一個(gè)文檔。例如一個(gè)網(wǎng)頁、一個(gè)商品信息。
????????詞條(Term):對(duì)文檔數(shù)據(jù)或用戶搜索數(shù)據(jù),利用某種算法分詞,得到的具備含義的詞語就是詞條。例如:我是中國(guó)人,就可以分為:我、是、中國(guó)人、中國(guó)、國(guó)人這樣的幾個(gè)詞條
創(chuàng)建倒排索引是對(duì)正向索引的一種特殊處理,流程如下:
-
將每一個(gè)文檔的數(shù)據(jù)利用算法分詞,得到一個(gè)個(gè)詞條
-
創(chuàng)建表,每行數(shù)據(jù)包括詞條、詞條所在文檔id、位置等信息
-
因?yàn)樵~條唯一性,可以給詞條創(chuàng)建索引,例如hash表結(jié)構(gòu)索引
如圖:
?倒排索引的搜索流程如下(以搜索"華為手機(jī)"為例):
????????雖然要先查詢倒排索引,再查詢倒排索引,但是無論是詞條、還是文檔id都建立了索引,查詢速度非常快!無需全表掃描。?
2.3、正向索引和倒排索引的區(qū)別
-
正向索引是最傳統(tǒng)的,根據(jù)id索引的方式。但根據(jù)詞條查詢時(shí),必須先逐條獲取每個(gè)文檔,然后判斷文檔中是否包含所需要的詞條,是根據(jù)文檔找詞條的過程。
-
而倒排索引則相反,是先找到用戶要搜索的詞條,根據(jù)詞條得到保護(hù)詞條的文檔的id,然后根據(jù)id獲取文檔。是根據(jù)詞條找文檔的過程
正向索引:
-
優(yōu)點(diǎn):
-
可以給多個(gè)字段創(chuàng)建索引
-
根據(jù)索引字段搜索、排序速度非???/strong>
-
-
缺點(diǎn):根據(jù)非索引字段,或者索引字段中的部分詞條查找時(shí),只能全表掃描。
倒排索引:
-
優(yōu)點(diǎn):根據(jù)詞條搜索、模糊搜索時(shí),速度非???/strong>
-
缺點(diǎn):
-
只能給詞條創(chuàng)建索引,而不是字段
-
無法根據(jù)字段做排序
-
3、elasticsearch中的概念理解
3.1、文檔和字段
????????elasticsearch是面向文檔存儲(chǔ)的,可以是數(shù)據(jù)庫(kù)中的一條商品數(shù)據(jù),一個(gè)訂單信息。文檔數(shù)據(jù)會(huì)被序列化為json格式后存儲(chǔ)在elasticsearch中。
????????而Json文檔中往往包含很多的字段(Field),類似于數(shù)據(jù)庫(kù)中的列。
3.2、索引和映射

????????因此,我們可以把索引當(dāng)做是數(shù)據(jù)庫(kù)中的表。數(shù)據(jù)庫(kù)的表會(huì)有約束信息,用來定義表的結(jié)構(gòu)、字段的名稱、類型等信息。因此,索引庫(kù)中就有映射(mapping),是索引中文檔的字段約束信息,類似表的結(jié)構(gòu)約束。