ElasticSearch7.6 入門學習(一)
一、ElasticSearch概述
ES是一個基於Lucene(資訊檢索工具包)做一些封裝和增強的可擴充套件的的分散式全文檢索引擎,幾乎是實時儲存和檢索資料。本身擴充套件性很好,可以擴充套件到上百臺伺服器,處理PB級別(大資料時代)的資料。它的目的是通過簡單的RestFul API來 隱藏Lucene的複雜性,從而讓全文搜尋變得簡單,已經成為排名第一的搜尋引擎類應用。
應用場景:涉及到搜尋的應用都可以使用ElasticSearch(大資料量)。
二、ElasticSearch 對比 Solr
- ES基本是開箱即用(解壓即可用),而solr安裝複雜。
- Solr利用Zookeeper進行分散式管理,而ES自身帶有分散式協調管理功能。
- Solr支援更多格式的資料,比如JSON, XML, CSV,而ES只支援JSON,小而精。
- Solr提供的功能更多,而ES更注重核心功能,高階功能可以依賴第三方外掛如IK,圖形化介面kibana。
- Solr查詢快,但更新索引時慢(即插入刪除慢),用於傳統搜尋應用如電商等查詢多。
ES建立索引快,即實時性查詢快,用於新興的實時搜尋應用如百度,新浪等搜尋。 - Solr比較成熟,有更大的社群,而ES更新快,學習成本高。
架構選型:
- 當單純的對已有資料進行搜尋時,Solr更快。
- 當實時建立索引時,Solr會產生IO阻塞,查詢效能較差。ElasticSearch具有明顯的優勢。
- 隨著資料量的增加,Solr的搜尋效率會變得更低。ElasticSearch卻沒有明顯的變化。
三、ElasticSearch核心概念
ES是面向文件的,對比關係型資料庫。
MySQL | ElasticSearch |
---|---|
資料庫(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不僅僅適用於日誌分析,它還可以支援其它任何資料分析和收集的場景,日誌分析和收集只是更具有代表性。
相關文章
- leaflet學習一 入門
- MyBatis入門學習(一)MyBatis
- Egg入門學習(一)
- 【mybatis學習之入門(一)】MyBatis
- ReactJS入門學習一ReactJS
- webpack入門學習手記(一)Web
- JavaScript入門-學習筆記(一)JavaScript筆記
- JDK學習基礎入門(一)JDK
- Dubbo學習筆記(一) 入門筆記
- golang入門學習筆記(一)Golang筆記
- Objective C 快速入門學習一Object
- gRPC入門學習之旅(一)RPC
- 《深度學習入門:》學習基本第一章深度學習
- 深入學習Spring框架(一)- 入門Spring框架
- Vue學習從入門到精通(一)Vue
- springmvc簡單學習(一)-----入門SpringMVC
- 資料結構學習☞入門(一)資料結構
- angular學習筆記(一)-入門案例Angular筆記
- maven 學習總結(一)——Maven入門Maven
- python學習筆記(一)——入門Python筆記
- CANopen學習筆記(一)CANopen入門筆記
- mybatis入門學習MyBatis
- Nginx入門學習Nginx
- Vue入門學習Vue
- ROS入門學習ROS
- nuxt 入門學習UX
- GORM學習入門GoORM
- afl入門學習
- Spark入門學習Spark
- React入門學習React
- 學習ORACLE 的入門 (一般流程)Oracle
- webpack4入門學習筆記(一)Web筆記
- Pytest學習(一)- 入門及基礎
- 學習筆記|AS入門(一) 環境篇筆記
- B站excel學習第一課入門Excel
- Linux入門學習Linux
- MyBatisPlus入門學習MyBatis
- spring入門學習Spring