搜尋引擎ElasticSearch18_ElasticSearch簡介1

花溪月影發表於2024-05-23

一、ElasticSearch簡介

 1、什麼是ElasticSearch

  Elaticsearch,簡稱為es, es是一個開源的高擴充套件的分散式全文檢索引擎,它可以近乎實時的儲存、檢索資料;本 身擴充套件性很好,可以擴充套件到上百臺伺服器,處理PB級別的資料。es也使用Java開發並使用Lucene作為其核心來實 現所有索引和搜尋的功能,但是它的目的是透過簡單的RESTful API來隱藏Lucene的複雜性,從而讓全文搜尋變得 簡單。

 2、ElasticSearch的使用案例

  • 2013年初,GitHub拋棄了Solr,採取ElasticSearch 來做PB級的搜尋。 “GitHub使用ElasticSearch搜尋20TB 的資料,包括13億檔案和1300億行程式碼” 維基百科:啟動以elasticsearch為基礎的核心搜尋架構
  • SoundCloud:“SoundCloud使用ElasticSearch為1.8億使用者提供即時而精準的音樂搜尋服務”
  • 百度:百度目前廣泛使用ElasticSearch作為文字資料分析,採集百度所有伺服器上的各類指標資料及使用者自 定義資料,透過對各種資料進行多維分析展示,輔助定位分析例項異常或業務層面異常。目前覆蓋百度內部 20多個業務線(包括casio、雲分析、網盟、預測、文庫、直達號、錢包、風控等),單叢集最大100臺機 器,200個ES節點,每天匯入30TB+資料
  • 新浪使用ES 分析處理32億條實時日誌
  • 阿里使用ES 構建挖財自己的日誌採集和分析體系

 3、ElasticSearch對比Solr

  • Solr 利用 Zookeeper 進行分散式管理,而 Elasticsearch 自身帶有分散式協調管理功能;
  • Solr 支援更多格式的資料,而 Elasticsearch 僅支援json檔案格式;
  • Solr 官方提供的功能更多,而 Elasticsearch 本身更注重於核心功能,高階功能多有第三方外掛提供;
  • Solr 在傳統的搜尋應用中表現好於 Elasticsearch,但在處理實時搜尋應用時效率明顯低於 Elasticsearch

二、ElasticSearch安裝與啟動

 1、下載ES壓縮包

  ElasticSearch分為Linux和Window版本,基於我們主要學習的是ElasticSearch的Java客戶端的使用,所以我們課 程中使用的是安裝較為簡便的Window版本,專案上線後,公司的運維人員會安裝Linux版的ES供我們連線使用。

  ElasticSearch的官方地址: https://www.elastic.co/products/elasticsearch

   

   

   

   

  在資料中已經提供了下載好的5.6.8的壓縮包:

 2、安裝ES服務

  Window版的ElasticSearch的安裝很簡單,類似Window版的Tomcat,解壓開即安裝完畢,解壓後的ElasticSearch 的目錄結構如下:

   

   修改elasticsearch配置檔案:config/elasticsearch.yml,增加以下兩句命令:

http.cors.enabled: true
http.cors.allow‐origin: "*"

  此步為允許elasticsearch跨越訪問,如果不安裝後面的elasticsearch-head是可以不修改,直接啟動。

 3、啟動ES服務

  點選ElasticSearch下的bin目錄下的elasticsearch.bat啟動,控制檯顯示的日誌資訊如下:

   

   

  注意:9300是tcp通訊埠,叢集間和TCPClient都執行該埠,9200是http協議的RESTful介面 。

  透過瀏覽器訪問ElasticSearch伺服器,看到如下返回的json資訊,代表服務啟動成功:

   

  注意:ElasticSearch是使用java開發的,且本版本的es需要的jdk版本要是1.8以上,所以安裝ElasticSearch之前保 證JDK1.8+安裝完畢,並正確的配置好JDK環境變數,否則啟動ElasticSearch失敗。

 4、安裝ES的圖形化介面外掛

  ElasticSearch不同於Solr自帶圖形化介面,我們可以透過安裝ElasticSearch的head外掛,完成圖形化介面的效 果,完成索引資料的檢視。安裝外掛的方式有兩種,線上安裝和本地安裝。本文件採用本地安裝方式進行head插 件的安裝。elasticsearch-5-*以上版本安裝head需要安裝node和grunt

  1)下載head外掛:https://github.com/mobz/elasticsearch-head

   在資料中已經提供了elasticsearch-head-master外掛壓縮包:

  2)將elasticsearch-head-master壓縮包解壓到任意目錄,但是要和elasticsearch的安裝目錄區別開

  3)下載nodejs:https://nodejs.org/en/download/ 在資料中已經提供了nodejs安裝程式:

  雙擊安裝程式,步驟截圖如下:

     

     

   

  安裝完畢,可以透過cmd控制檯輸入:node -v 檢視版本號

  5)將grunt安裝為全域性命令 ,Grunt是基於Node.js的專案構建工具

   在cmd控制檯中輸入如下執行命令:

 npm install ‐g grunt‐cli

   執行結果如下圖:

    

  6)進入elasticsearch-head-master目錄啟動head,在命令提示符下輸入命令:

>npm install
>grunt server

   

  7)開啟瀏覽器,輸入 http://localhost:9100,看到如下頁面:

   

   如果不能成功連線到es服務,需要修改ElasticSearch的config目錄下的配置檔案:config/elasticsearch.yml,增加 以下兩句命令:

http.cors.enabled: true
http.cors.allow‐origin: "*"

   然後重新啟動ElasticSearch服務。

三、ElasticSearch相關概念(術語)

 1、概述

  Elasticsearch是面向文件(document oriented)的,這意味著它可以儲存整個物件或文件(document)。然而它不僅 僅是儲存,還會索引(index)每個文件的內容使之可以被搜尋。在Elasticsearch中,你可以對文件(而非成行成列的 資料)進行索引、搜尋、排序、過濾。Elasticsearch比傳統關係型資料庫如下:

Relational DB ‐> Databases ‐> Tables ‐> Rows ‐> Columns
Elasticsearch ‐> Indices   ‐> Types  ‐> Documents ‐> Fields

 2、Elasticsearch核心概念

  2.1 索引index

   一個索引就是一個擁有幾分相似特徵的文件的集合。比如說,你可以有一個客戶資料的索引,另一個產品目錄的索 引,還有一個訂單資料的索引。一個索引由一個名字來標識(必須全部是小寫字母的),並且當我們要對對應於這 個索引中的文件進行索引、搜尋、更新和刪除的時候,都要使用到這個名字。在一個叢集中,可以定義任意多的索 引。

  2.2 型別 type

   在一個索引中,你可以定義一種或多種型別。一個型別是你的索引的一個邏輯上的分類/分割槽,其語義完全由你來 定。通常,會為具有一組共同欄位的文件定義一個型別。比如說,我們假設你運營一個部落格平臺並且將你所有的數 據儲存到一個索引中。在這個索引中,你可以為使用者資料定義一個型別,為部落格資料定義另一個型別,當然,也可 以為評論資料定義另一個型別。

  2.3 欄位Field

   相當於是資料表的欄位,對文件資料根據不同屬性進行的分類標識

  2.4 對映 mapping

   mapping是處理資料的方式和規則方面做一些限制,如某個欄位的資料型別、預設值、分析器、是否被索引等等, 這些都是對映裡面可以設定的,其它就是處理es裡面資料的一些使用規則設定也叫做對映,按著最優規則處理資料 對效能提高很大,因此才需要建立對映,並且需要思考如何建立對映才能對效能更好。

  2.5 文件 document

   一個文件是一個可被索引的基礎資訊單元。比如,你可以擁有某一個客戶的文件,某一個產品的一個文件,當然, 也可以擁有某個訂單的一個文件。文件以JSON(Javascript Object Notation)格式來表示,而JSON是一個到處存 在的網際網路資料互動格式。 在一個index/type裡面,你可以儲存任意多的文件。注意,儘管一個文件,物理上存在於一個索引之中,文件必須 被索引/賦予一個索引的type。

  2.6 接近實時 NRT

   Elasticsearch是一個接近實時的搜尋平臺。這意味著,從索引一個文件直到這個文件能夠被搜尋到有一個輕微的延 遲(通常是1秒以內)

  2.7 叢集 cluster

   一個叢集就是由一個或多個節點組織在一起,它們共同持有整個的資料,並一起提供索引和搜尋功能。一個叢集由 一個唯一的名字標識,這個名字預設就是“elasticsearch”。這個名字是重要的,因為一個節點只能透過指定某個集 群的名字,來加入這個叢集

  2.8 節點 node

   一個節點是叢集中的一個伺服器,作為叢集的一部分,它儲存資料,參與叢集的索引和搜尋功能。和叢集類似,一 個節點也是由一個名字來標識的,預設情況下,這個名字是一個隨機的漫威漫畫角色的名字,這個名字會在啟動的 時候賦予節點。這個名字對於管理工作來說挺重要的,因為在這個管理過程中,你會去確定網路中的哪些伺服器對 應於Elasticsearch叢集中的哪些節點。

   一個節點可以透過配置叢集名稱的方式來加入一個指定的叢集。預設情況下,每個節點都會被安排加入到一個叫 做“elasticsearch”的叢集中,這意味著,如果你在你的網路中啟動了若干個節點,並假定它們能夠相互發現彼此, 它們將會自動地形成並加入到一個叫做“elasticsearch”的叢集中。

   在一個叢集裡,只要你想,可以擁有任意多個節點。而且,如果當前你的網路中沒有執行任何Elasticsearch節點, 這時啟動一個節點,會預設建立並加入一個叫做“elasticsearch”的叢集。

  2.9 分片和複製 shards&replicas

   一個索引可以儲存超出單個結點硬體限制的大量資料。比如,一個具有10億文件的索引佔據1TB的磁碟空間,而任 一節點都沒有這樣大的磁碟空間;或者單個節點處理搜尋請求,響應太慢。為了解決這個問題,Elasticsearch提供 了將索引劃分成多份的能力,這些份就叫做分片。當你建立一個索引的時候,你可以指定你想要的分片的數量。每個分片本身也是一個功能完善並且獨立的“索引”,這個“索引”可以被放置到叢集中的任何節點上。分片很重要,主 要有兩方面的原因: 1)允許你水平分割/擴充套件你的內容容量。 2)允許你在分片(潛在地,位於多個節點上)之上 進行分散式的、並行的操作,進而提高效能/吞吐量。

   至於一個分片怎樣分佈,它的文件怎樣聚合回搜尋請求,是完全由Elasticsearch管理的,對於作為使用者的你來說, 這些都是透明的。

   在一個網路/雲的環境裡,失敗隨時都可能發生,在某個分片/節點不知怎麼的就處於離線狀態,或者由於任何原因 消失了,這種情況下,有一個故障轉移機制是非常有用並且是強烈推薦的。為此目的,Elasticsearch允許你建立分 片的一份或多份複製,這些複製叫做複製分片,或者直接叫複製。

   複製之所以重要,有兩個主要原因: 在分片/節點失敗的情況下,提供了高可用性。因為這個原因,注意到複製分 片從不與原/主要(original/primary)分片置於同一節點上是非常重要的。擴充套件你的搜尋量/吞吐量,因為搜尋可以 在所有的複製上並行執行。總之,每個索引可以被分成多個分片。一個索引也可以被複制0次(意思是沒有複製) 或多次。一旦複製了,每個索引就有了主分片(作為複製源的原來的分片)和複製分片(主分片的複製)之別。分 片和複製的數量可以在索引建立的時候指定。在索引建立之後,你可以在任何時候動態地改變複製的數量,但是你 事後不能改變分片的數量。

   預設情況下,Elasticsearch中的每個索引被分片5個主分片和1個複製,這意味著,如果你的叢集中至少有兩個節 點,你的索引將會有5個主分片和另外5個複製分片(1個完全複製),這樣的話每個索引總共就有10個分片。

相關文章