【Elasticsearch 技術分享】—— Elasticsearch ?倒排索引?這都是什麼?

前言

革命同志是塊磚,哪裏須要哪裏搬!這不,老大發話,要我在組內作一個 Elasticsearch 技術分享。這不話題一轉,開始看起來 ES 了。雖然好久以前用過 ELK 作過日誌監控系統,可是畢竟時隔已久,仍是得從頭看起。固然手頭的活也不能停,話很少說,開始分享。先看看什麼是 ES?node

什麼是ES

Elasticsearch 是分佈式搜索和分析引擎。算法

Elasticsearch 爲全部類型的數據提供近實時(near real-time)的搜索和分析。sql

經常使用場景:編程

  1. 網站搜索
  2. ELK 日誌採集,存儲,分析
  3. 地理信息系統分析

像下圖中使用的設計:緩存

HiP4n4-mnRdVv

特色:數據結構

  1. ES是一個分佈式文檔存儲,存儲的數據都是序列化爲 JSON documents 。
  2. 使用倒排索引存儲數據,倒排索引比較適合全文本搜索。
  3. 基於Apache Lucene搜索引擎庫,能夠存儲,檢索文檔及元數據。
  4. 支持 JSON 樣式的查詢語言——Query DSL,也支持 SQL 樣式的查詢。
  5. 集羣部署,易於擴展。節點(node)分片(shard),將新的 node 添加到集羣時,ES 會自動遷移 shard 到新 node 上,從新平衡集羣。併發

    1. shard 分爲兩種 主分片(primary shard)和 副本分片 (replica shard)
    2. replica shard 存放的是 primary shard 的冗餘副本 —— 能夠防止集羣故障,數據丟失,同時能夠提升搜索或檢索速度。
    3. 在建立索引時 primary shard 數量是固定的,而replica shard 數量是能夠更改的。
    4. 分片由索引配置,分片越多,維護索引則開銷則越大,分片大小越大,則 ES 在增減節點從新平衡集羣時,分片移動時間越長。
  6. 集羣恢復: 跨集羣複製 (CCR),能夠自動將索引從主集羣同步到熱備份的輔助遠程集羣。

什麼是倒排索引?

倒排索引也能夠成爲反向索引。分佈式

做爲開發我們常常接觸到的就是 MySql,假設有一堆技術書籍,而且已經編上號。性能

  1. Java 併發編程之美
  2. Java 開發手冊
  3. 深刻分佈式緩存
  4. Java 併發程序設計
  5. 算法
  6. 數據結構與算法
  • 若是放在 MySql 裏面就是這樣
id book_name
1 Java 併發編程之美
2 Java 開發手冊
3 深刻分佈式緩存
4 Java 併發程序設計
5 算法
6 數據結構與算法

此時我想查詢全部關於 併發 的書籍。網站

select * from table_book where book_name like %併發%;

而後會開始遍歷表格,查找到 1和4兩條記錄。

  • 若是是倒排索引處理的話

首先會將每一個名稱進行分詞,好比 Java 併發編程之美 會被分爲 Java 併發 編程
分詞結束以後按照詞關聯書籍的編號。

term ids
Java 一、二、4
併發 一、4
編程 1
算法 五、6
分佈式 3
... ...

在倒排索引中搜索併發,而後進行檢索,就很容易定位到關於併發書籍的編號。

那什麼是 Lucene?

Lucene 能夠理解爲一個開源的、高性能、可伸縮的信息搜索庫。使用 Java 開發,封裝了各類倒排索引和搜索的API。至關於一個組件。

而 ES 就是在 Lucene 之上進行的開發,從而能夠高可用集羣部署故障遷移備份容災等。

總結

就這麼多,先知道個 ES 是幹嗎的。後續再慢慢看、慢慢總結。

相關文章
相關標籤/搜索