回覆列表
  • 1 # yes的練級攻略

    Elastic主要用於快速儲存、搜尋和分析海量的資料。它的底層是基於開源庫Lucene。

    Elastic是面向文件型資料庫,一條資料就是一個文件。在插入資料的時候,elastic就默默的為插入這些欄位都建立的索引--倒排索引。而倒排索引是比mysql的B+樹索引更快的索引。

    而且如果多個欄位聯合查詢就利用跳錶快速做與運算或者bitset按位與。

    主要應用場景 站內搜尋,日誌資料分析,BI系統等。

  • 2 # 此生唯一

    ElasticSearch(業界常稱為ES)是一個全文搜尋引擎,其特點為分散式,易擴充套件,實時檔案儲存與提取!

    ES的底層使用Apache鼎鼎大名的Lucence開源框架實現,嚴格來說lucence只屬於一個工具包,提供了簡單的介面用於實現全文檢索!

    lucence有什麼用呢?

    想想我們使用天貓購物的時候,假設輸入一個床,整個頁面能顯示木板床,水床,甚至有床墊,床單等購物資訊出現,就是因為所有這些與床有關的資訊錄入時,以“床”這個詞作為分詞,建立索引,從而能得到各種與床有關的店鋪,商品等等!

    如果用mysql,怎麼實現呢,一大段商品資訊描述,使用like"%床%"來查詢,本來就不走索引,欄位還很大,別說億級別的資料了,幾百萬就能把一臺mysql伺服器搞死!

    那麼ES怎麼做的呢?跟mysql的查詢方式相反,mysql是從文件中提取關鍵字,而使用ES可以先提取出關鍵字(使用特定的分詞器),然後關鍵字出現的位置,建立倒排索引,明確的記錄關鍵詞所在的位置,舉例截圖如下:

    圖中的箭頭所示的一列資料叫做Posting List,就是存放關鍵字對應的位置;這樣在查詢羽毛球的時候,能迅速返回證件號1的資料,查年齡20的時候,能迅速返回證件號2,3對應的資料;

    圖中的Term就是Term Dictionary(字典),ES對欄位Term Dictionary進行了排序,然後使用二分法查詢資料,查詢到的效率為O(logN),為了避免磁碟IO的低效能,ES可以把字典放在了記憶體中來提升查詢效能,那麼問題來了,如果是億萬級的資料,年齡還好,但是愛好可能也是億萬級別的量,這時候記憶體可能就要爆了,於是就有了Term Index,就是將Term Dictionary再進行一次索引,比如說羽毛球這個詞,建立一個索引樹,使用羽字就可以定位到羽字開頭的所有Term Dictionary,然後在使用二分法查詢到需要的關鍵詞,這樣就可以只把Term Index放入記憶體,從而提升整個ES系統的處理能力;

    上面就是ES大概的原理,當然遠不止於此,作為大資料領域中文件處理的佼佼者,ES大量使用在日誌記錄與分析,全文檢索,資料統計等等情景中!

    以上是ES簡單的原理說明,對於分詞器選擇,字典樹壓縮,如何使用等更多的東西沒有描述,以後找機會會詳細分享一次,請關注。。。

  • 3 # 老顧聊技術

    es實現原理就是利用了Lucence框架實現索引,支援分散式部署,效能非常高。現在用的比較廣泛,如:網站的全文搜尋,資料的統計分析等。

    如果專案需要選型,推薦使用es

  • 中秋節和大豐收的關聯?
  • 高溫過的車,是不是容易再高溫?