ES系列一、Elasticsearch 概述

一、ES 產生背景

  對於一般的公司,初期是沒有那麼多數據的,所以很多公司更傾向於使用傳統的數據庫:mysql;比如我們要查找關鍵字“呀呀呀”,那麼查詢的方式大概就是:select * from table where field like ‘%呀呀呀%’; 但是隨着業務發展,數據會不斷的膨脹,那麼問題就來了;mysql單表查詢能力即便經過了優化,它的極限也就是400W左右的數據量。而且還會經常出現查詢超時的現象;

然後很多公司開始對數據庫進行橫向和縱向的擴容,開始進行數據庫表的“拆分”:橫向拆分和縱向拆分;但是即便這樣操作,仍然會出現很多問題,比如:

  1、數據庫會出現單點故障問題,於是先天主從複製關係,於是增加了運維成本.
  2、因爲對錶的拆分,增加了後期維護的難度,同樣也是增加了運維成本.
  3、即便做了大量的維護,但對於大數據的檢索操作,依然很慢,完全達不到期望值.

 

 

所以爲了滿足需求: 海量數據組合條件查詢 、毫秒級或者秒級返回數據,ElasticSearch應運而生。

 

二、Lucene 定義

  lucene是一個開放源代碼的全文檢索引擎工具包,但它不是一個完整的全文檢索引擎,而是一個全文檢索引擎的架構,提供了完整的查詢引擎和索引引擎,部分文本分析引擎。官網地址: http://lucene.apache.org/

  Lucene實現全文檢索的流程:
                索引流程:採集數據--->構建文檔對象--->創建索引(將文檔寫入索引庫)。
                搜索流程:創建查詢--->執行搜索--->渲染搜索結果。

  

三、ES 定義 

  ElasticSearch是一個基於Lucene的搜索服務器。它提供了一個分佈式多用戶能力的全文搜索引擎,基於RESTful web接口。Elasticsearch是用Java開發的,並作爲Apache許可條款下的開放源碼發佈,是當前流行的企業級搜索引擎。設計用於雲計算中,能夠達到實時搜索,穩定,可靠,快速,安裝使用方便。官網地址:https://www.elastic.co/
  

四、ES vs Lucene

   成品與半成品的關係。Lucene專注於搜索底層的建設,而ElasticSearch專注於企業應用。
   比如:Lucene相當於汽車引擎,而ES相當於汽車。
  

 

五、Solr 定義

  Solr是Apache 下的一個開源項目,使用Java基於Lucene開發的全文檢索服務是一個獨立的企業級搜索應用服務器,它對外提供類似於Webservice的API接口。用戶可以通過http請求,向搜索引擎服務器提交一定格式的XML文件,生成索引;也可以通過Http Get操作提出查找請求,並得到XML格式的返回結果。官網地址: https://lucene.apache.org/solr/

 

六、ES vs Solr 優缺點

  

 

七、ES vs Solr 

    檢索速度:當單純的對已有數據進行搜索時,Solr更快。

  

    當實時建立索引時, Solr會產生io阻塞,查詢性能較差, Elasticsearch具有明顯的優勢。
    隨着數據量的增加,Solr的搜索效率會變得更低,而Elasticsearch卻沒有明顯的變化。
    大型互聯網公司,實際生產環境測試,將搜索引擎從Solr轉到Elasticsearch以後的平均查詢速度有了50倍的提升。
  總結:
    二者安裝都很簡單。
    Solr 利用 Zookeeper 進行分佈式管理,而Elasticsearch 自身帶有分佈式協調管理功能。
    Solr 支持更多格式的數據,比如JSON、XML、CSV,而 Elasticsearch 僅支持json文件格式。
    Solr 官方提供的功能更多,而 Elasticsearch 本身更注重於核心功能,高級功能多有第三方插件提供
    Solr 在傳統的搜索應用中表現好於 Elasticsearch,但在處理實時搜索應用時效率明顯低於 Elasticsearch。
    Solr 是傳統搜索應用的有力解決方案,但 Elasticsearch更適用於新興的實時搜索應用。
 

八、ES vs 關係型數據庫

 

  索引(Index)

     ES將數據存儲於一個或多個索引中,索引是具有類似特性的文檔的集合。類比傳統的關係型數據庫領域來說,索引相當於SQL中的一個數據庫,或者一個數據存儲方案(schema)。索引由其名稱(必須爲全小寫字符)進行標識,並通過引用此名稱完成文檔的創建、搜索、更新及刪除操作。一個ES集羣中可以按需創建任意數目的索引。

 

  類型(Type)

     類型是索引內部的邏輯分區(category/partition),然而其意義完全取決於用戶需求。因此,一個索引內部可定義一個或多個類型(type)。一般來說,類型就是爲那些擁有相同的域的文檔做的預定義。例如,在索引中,可以定義一個用於存儲用戶數據的類型,一個存儲日誌數據的類型,以及一個存儲評論數據的類型。類比傳統的關係型數據庫領域來說,類型相當於“表”。

 

  文檔(Document)

     文檔是Lucene索引和搜索的原子單位,它是包含了一個或多個域的容器,基於JSON格式進行表示。文檔由一個或多個域組成,每個域擁有一個名字及一個或多個值,有多個值的域通常稱爲“多值域”。每個文檔可以存儲不同的域集,但同一類型下的文檔至應該有某種程度上的相似之處。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章