ElasticSearch7.6 入門學習(一)

小白寫程式發表於2020-04-20

一、ElasticSearch概述

ES是一個基於Lucene(資訊檢索工具包)做一些封裝和增強的可擴充套件的的分散式全文檢索引擎,幾乎是實時儲存和檢索資料。本身擴充套件性很好,可以擴充套件到上百臺伺服器,處理PB級別(大資料時代)的資料。它的目的是通過簡單的RestFul API來 隱藏Lucene的複雜性,從而讓全文搜尋變得簡單,已經成為排名第一的搜尋引擎類應用

應用場景:涉及到搜尋的應用都可以使用ElasticSearch(大資料量)。

二、ElasticSearch 對比 Solr

  1. ES基本是開箱即用(解壓即可用),而solr安裝複雜。
  2. Solr利用Zookeeper進行分散式管理,而ES自身帶有分散式協調管理功能。
  3. Solr支援更多格式的資料,比如JSON, XML, CSV,而ES只支援JSON,小而精。
  4. Solr提供的功能更多,而ES更注重核心功能,高階功能可以依賴第三方外掛如IK,圖形化介面kibana。
  5. Solr查詢快,但更新索引時慢(即插入刪除慢),用於傳統搜尋應用如電商等查詢多。
    ES建立索引快,即實時性查詢快,用於新興的實時搜尋應用如百度,新浪等搜尋。
  6. Solr比較成熟,有更大的社群,而ES更新快,學習成本高。

架構選型:

  • 當單純的對已有資料進行搜尋時,Solr更快。
  • 當實時建立索引時,Solr會產生IO阻塞,查詢效能較差。ElasticSearch具有明顯的優勢。
  • 隨著資料量的增加,Solr的搜尋效率會變得更低。ElasticSearch卻沒有明顯的變化。

三、ElasticSearch核心概念

ES是面向文件的,對比關係型資料庫。

MySQLElasticSearch
資料庫(database)索引(index)
表(tables)型別(types)
資料行(rows)文件(documents)
資料列(columns)欄位(fileds)
約束(schema)對映(Mapping)

ElasticSearch(叢集)中可以包含多個索引(資料庫),每個索引中可以包含多個型別(表),每個型別下又包含多個文件(行記錄),每個文件中又包含多個欄位(列)。

3.1 近實時
從寫入資料到可以被搜尋到有一個小延遲(大概1s),基於ES執行搜尋和分析可以達到秒級(倒排索引)。

3.2 叢集(Cluster)
一個叢集至少有一個節點,而一個節點就是一個ES程式。節點可以有多個索引。如果建立索引,那麼索引將會有5個分片(Primary主分片)構成的,每個主分片會有一個副本(Replica複製分片)。
在這裡插入圖片描述
如上圖是一個有三個節點的叢集,可以看到叢集內只有一個索引,有5個主分片P0-5,5個複製分片R0-5,而且主分片和對應的複製分片都不會在同一個節點中,這樣有利於某個節點掛掉了,資料不至於丟失。實際上,一個分片就是一個Lucene索引,一個包含倒排索引的檔案目錄。

3.3 倒排索引
ES使用的是一種稱為倒排索引的結構,採用Lucene倒排索引作為底層,一個分片就是一個Lucene索引。這種結構適用於快速的全文搜尋,一個索引由文件中所有不重複的列表構成,對於每一個詞,都有一個包含它的文件列表。 倒排索引使得ES在不掃描全部文件的情況下,就能告訴你哪些文件包含特定的關鍵字。

現有兩個文件,每個文件包含如下內容:

  • Study every day, good good up to forever # 文件1包含的內容
  • To forever, study every day, good good up # 文件2包含的內容
    為了建立倒排索引,首先要將每個文件拆分成獨立的詞(詞條/tokens),然後建立一個包含所有不重複的詞條的排序列表,列處每個詞條出現在哪個文件:
    在這裡插入圖片描述
    現在搜尋to forever,只需要檢視包含每個詞條的文件 score
    在這裡插入圖片描述
    兩個文件都匹配,但是第一個文件比第二個匹配度更高,如果沒有別的條件,這兩個包含關鍵字的文件都將返回。

3.4 節點(Node)
節點也有名稱(預設是隨機分配的),節點名稱很重要(在執行運維管理操作時)。預設節點會加入一個名稱為ElasticSearch的叢集,如果直接啟動一堆節點,那麼他們會自動組成一個ElasticSearch叢集。一個節點也可以組成一個ElasticSearch叢集。

3.5 索引(資料庫,index)
索引包含一堆相似結構的文件資料,比如一個客戶索引,訂單索引。一個索引包含多個文件,一個index代表一類相似或相同的document。

3.6 型別(表,type)
6.x版本,ES規定只能一個索引只能有一個type;7.x版本預設使用_doc作為type;官方說在8.x版本會徹底移除type。type是index中的一個邏輯資料分類。一個type下的document都有相同的field。比如部落格系統,有一個索引,可以定義使用者資料type,部落格資料type,評論資料type。

3.7 文件(資料行,document)
文件是ES中最小的資料單元。一個document可以是一條客戶資料,通常用JSON結構表示,每個index下的type中,可以儲存多個document。

3.8 欄位(資料列,field)
欄位是ES的最小單元。一個document中可以有多個field,每個field就是一個資料欄位。

3.9 對映(約束,Mapping)
資料如何存放到索引物件上,需要有一個對映配置,包括:資料型別,是否儲存,是否分詞。

例如,建立一個名為blog的index,type不需要單獨建立,在建立Mapping時指定就可以。Mapping用來定義document中的每個欄位的型別,即所使用的analyze,是否索引等屬性。
在這裡插入圖片描述

四、瞭解ELK

ELK是Elasticsearch、Logstash、Kibana三大開源框架首字母大寫簡稱。市面上也被成為Elastic Stack。

  • Elasticsearch是一個基於Lucene、分散式、通過Restful方式進行互動的近實時搜尋平臺框架。像類似百度、谷歌這種大資料全文搜尋引擎的場景都可以使用Elasticsearch作為底層支援框架,可見Elasticsearch提供的搜尋能力確實強大,市面上很多時候我們簡稱Elasticsearch為es。
  • Logstash是ELK 的中央資料流引擎,用於從不同目標(檔案/資料儲存/MQ)收集的不同格式資料,經過過濾後支援輸出到不同目的地(檔案/MQ/redis/elasticsearch/kafka等)。
  • Kibana可以將elasticsearch的資料通過友好的頁面展示出來,提供實時分析的功能。

實際上ELK不僅僅適用於日誌分析,它還可以支援其它任何資料分析和收集的場景,日誌分析和收集只是更具有代表性。
在這裡插入圖片描述

相關文章