用最簡單的話告訴你什麼是ElasticSearch

介紹

Elasticsearch 是一個分佈式可擴展的實時搜索和分析引擎,一個創建在全文搜索引擎 Apache Lucene(TM) 基礎上的搜索引擎.固然 Elasticsearch 並不單單是 Lucene 那麼簡單,下面就介紹ElasticSearch爲何是分佈式的,可擴展,高性能,高可用。前端

什麼是搜索

在咱們想知道一些信息時,就會使用一些搜索引擎來獲取咱們想要的數據,好比搜索咱們喜歡的一款遊戲,或者喜歡的一本書等等,這就是提到搜索的的第一印象,說直白點就是在任何場景下找尋你想要知道的信息,這就是搜索。算法

  • 如今的搜索也稱爲垂直搜索

垂直搜索引針對某一個行業的專業搜索引擎,好比說電商網站,新聞網站,各類app內部等等,他們都是搜索引擎的細分和延伸,在抽取出須要的數據進行處理後再以某種形式返回給用戶。數據庫

若是用數據庫來作搜索會怎麼樣

例如咱們這裏有一張商品表,如今咱們要搜索"衣服"這個關鍵字,,執行了 select * from products where product_name like %衣服%,(假設這裏沒有其餘任何提高效率的設置)來進行搜索,或者進行其餘字段的匹配,能夠分析一下這個方式的缺點。服務器

  • 1,好比說,每條記錄的指定字段的數據會很長,好比說「商品介紹」這個字段,可能會有幾千或者幾萬個字符,那麼搜索的時候就會去這些字符裏面進行匹配是否包含要搜索的關鍵詞。
  • 2,這種方式只能搜索到徹底包含「衣服」這個兩個字符的記錄,可是可能會有一些特殊的狀況,某幾條記錄裏面的「衣服」關鍵詞並非連續的,可能衣服中間會插入某些字符,這個時候就搜索不出來這些記錄了,可是這個商品又是咱們但願搜索出來的,這個時候這種方式的弊端就十分明顯了。

總的來講用數據庫來實現搜索是不太靠譜的,性能會不好。
app

什麼是全文檢索

首先須要瞭解什麼是倒排索引?咱們這裏先上一幅圖,裏面有4條記錄。

如今將這4條記錄的內容進行拆分紅一些詞條,這個過程叫作分詞

如今咱們獲得了這4條記錄拆分出來詞語,而後將這寫詞語放到一個列表中,並記錄他們的ID,這個分析出來的就是 倒排索引

如今咱們輸入 生化電影 這個關鍵詞,這個時候搜素引擎將咱們輸入的內容分詞爲 生化電影 這兩個關鍵詞,而後使用這個兩個關鍵詞去倒排索引裏面匹配,發現包含 生化 這個關鍵詞的記錄有ID爲 1,2,3,4這四條記錄,包含 電影 這個關鍵詞的有ID爲1這條記錄,因爲ID爲1這條記錄已經被錄入了,因此就被排除在外了, 這時候咱們就獲得了想要ID爲1234這4條記錄,同理,若是咱們只輸入 電影 這個關鍵詞,那麼符合條件的只有ID爲1這條記錄了。分佈式

全文檢索就是從拆分詞語,存入倒排索引,而後分析用戶輸入的內容,在倒排索引裏面進行匹配,這個過程就是全文檢索。性能

什麼是ElasticSearch

首先須要知道什麼是lucene,lucene它就是一個Java的jar包,裏面實現了倒排索引的算法和其餘的全文檢索相關的東西,ElasticSearch就是對lucene進行了封裝,爲何有lucene了還要ElasticSeaearch來幹什麼呢?首先,當數據量很大的時候,好比有1PB的數據,這個時候數據放在同一臺機器上基本就不行了,那麼把數據分開來放在多臺機器上呢?那就變成分佈式了,這個時候數據前端獲取數據的時候到底去那一臺機器上面去獲取數據呢?這個時候就很麻煩了,若是某一臺機器宕機了,那麼這個機器上的數據就獲取不到了,這也就沒法保證高可用性了,還有數據存儲的時候怎麼到底存入那臺機器等等,這些都須要人爲的處理和維護。這個時候ElasticSearch就應運而生了,它就將lucene這些弊端給徹底解決了。網站

舉例一些優勢

  1. 高性能,自動維護數據分佈到多個節點進行索引的創建,還有搜索請求分佈到多個節點的執行。
  2. 高可用,自動維護數據的冗餘副本,保證說,一些機器宕機了,不會形成數據的丟失。
  3. 封裝了更多的高級功能,以給咱們提供更多的高級支持,讓咱們快速的開發應用,開發更加複雜的應用,複雜的搜索功能,聚合分析的功能,基於地理位置的搜索(好比周圍一千米內有幾家咖啡廳)等等。
  4. 動態擴容,當咱們數據量急劇提高的時候,咱們只須要增長機器就好了,好比兩臺機器存放1.2T數據,那麼沒臺機器存放就是600G,可是若是600G對於服務器的壓力太大了,這個時候就須要增長第三臺機器,讓他們每人負責400G的數據,這個過程不須要人爲的去分配,只須要將汲取加入集羣中就自動完成。
相關文章
相關標籤/搜索