Elasticsearch系列---初識Elasticsearch

Elasticsearch是什麼?

Elasticsearch簡稱ES,是一個基於Lucene構建的開源、分佈式、Restful接口的全文搜索引擎,還是一個分佈式文檔數據庫。天生就是分佈式、高可用、可擴展的,可以在很短的時間內存儲、搜索和分析大量的數據。

什麼是全文搜索?

全文搜索也叫全文檢索,是指掃描文章中的每一個詞,對每一個詞進建立一個索引,指明該詞在文章中出現的次數和位置,當前端用戶輸入的關鍵詞發起查詢請求後,搜索引擎就會根據事先建立的索引進行查找,並將查詢的結果響應給用戶。
這裏有兩個關鍵字:分詞和索引,Elasticsearch內部會完成這兩件事情,對保存的文本內容按規則進行分詞,並對這些分詞後的詞條建立索引,供用戶查詢。

什麼是倒排索引?

全文搜索過程根據關鍵詞創建的索引叫倒排索引,顧名思義,建立正向關係“文本內容-關鍵詞”叫正排索引,後續會介紹,倒排索引就是把原有關係倒過來,建立成“關鍵詞-文本內容”的關係,這樣的關係非常利於搜索。
舉個例子:

  • 文本1:I have a friend who loves smile
  • 文本2:I have a dream today

先進行英文分詞,再建立倒排索引,得到一份簡易的“關鍵詞-文本”的映射關係如下:

關鍵詞 文本編號
I 1,2
have 1,2
a 1,2
friend 1
who 1
loves 1
smile 1
dream 2
today 2

有了這個映射表,搜索"have"關鍵詞時,立即就能返回id爲1,2的兩條記錄,搜索today時,返回id爲2的記錄,這樣的搜索性能非常高。當然Elasticsearch維護的倒排索引包含更多的信息,此處只是作簡易的原理介紹。

Elasticsearch什麼場景適用?

常見場景
  1. 搜索類場景
    常見的搜索場景比如說電商網站、招聘網站、新聞資訊類網站、各種app內的搜索。

  2. 日誌分析類場景
    經典的ELK組合(Elasticsearch/Logstash/Kibana),可以完成日誌收集,日誌存儲,日誌分析查詢界面基本功能,目前該方案的實現很普及,大部分企業日誌分析系統都是使用該方案。

  3. 數據預警平臺及數據分析場景
    例如電商價格預警,在支持的電商平臺設置價格預警,當優惠的價格低於某個值時,觸發通知消息,通知用戶購買。
    數據分析常見的比如分析電商平臺銷售量top 10的品牌,分析博客系統、頭條網站top 10關注度、評論數、訪問量的內容等等。

  4. 商業BI系統
    比大型零售超市,需要分析上一季度用戶消費金額,年齡段,每天各時間段到店人數分佈等信息,輸出相應的報表數據,並預測下一季度的熱賣商品,根據年齡段定向推薦適宜產品。Elasticsearch執行數據分析和挖掘,Kibana做數據可視化。

常見案例
  • 維基百科、百度百科:有全文檢索、高亮、搜索推薦功能
  • stack overflow:有全文檢索,可以根據報錯關鍵信息,去搜索解決方法。
  • github:從上千億行代碼中搜索你想要的關鍵代碼。
  • 日誌分析系統:各企業內部搭建的ELK平臺。
  • 等等

Elasticsearch的架構圖

Elasticsearch功能框架

架構各組件簡單釋義:

  • gateway 底層存儲系統,一般爲文件系統,支持多種類型。
  • distributed lucence directory 基於lucence的分佈式框架,封裝了建立倒排索引、數據存儲、translog、segment等實現。
  • 模塊層 ES的主要模塊,包含索引模塊、搜索模塊、映射模塊。
  • Discovery 集羣node發現模塊,用於集羣node之間的通信,選舉coordinate node操作,支持多種發現機制,如zen,ec2等。
  • script 腳本解析模塊,用來支持在查詢語句中編寫的腳本,如painless,groovy,python等。
  • plugins 第三方插件,各種高級功能可由插件提供,支持定製。
  • transport/jmx 通信模塊,數據傳輸,底層使用netty框架
  • restful/node 對外提供的訪問Elasticsearch集羣的接口
  • x-pack elasticsearch的一個擴展包,集成安全、警告、監視、圖形和報告功能,無縫接入,可插拔設計。

Elasticsearch安裝使用

官網地址

https://www.elastic.co/cn/
上面有各版本的下載地址,官方文檔和使用示例,請自行下載安裝包。

源碼地址

https://github.com/elastic/elasticsearch
上面有各版本的源碼地址,可以切換到指定版本進行研究,目前選用版本爲6.3.1

安裝步驟
  1. 環境要求
    JDK 1.8及以上
  2. 官網下載安裝包,在指定目錄下直接解壓
  3. 執行bin/elasticsearch(Linux,注意不能使用root賬戶)
    bin\elasticsearch.bat(Windows)
  4. curl http://localhost:9200/或瀏覽器打開http://localhost:9200/地址,看到下面的響應表示啓動成功
{
  "name" : "node-1",
  "cluster_name" : "hy-application",
  "cluster_uuid" : "lJ4DRWOvQauAy-VEYiZc2g",
  "version" : {
    "number" : "6.3.1",
    "build_flavor" : "default",
    "build_type" : "tar",
    "build_hash" : "eb782d0",
    "build_date" : "2018-06-29T21:59:26.107521Z",
    "build_snapshot" : false,
    "lucene_version" : "7.3.1",
    "minimum_wire_compatibility_version" : "5.6.0",
    "minimum_index_compatibility_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"
}
  1. kibana下載解壓啓動
    執行bin/kibana(Linux,注意不能使用root賬戶)或bin\kibana.bat(Windows),如果kibana和elasticsearch部署在同一臺機器上,使用默認的配置文件即可。
  2. 驗證kibana,瀏覽器上輸入http://192.168.17.137:5601/,出現如下界面表示啓動成功:
    圖二

小結

本篇簡單介紹了Elasticsearch的基本概念,適用場景和主要的功能框架,以及最簡單的用於學習驗證的安裝啓動步驟,作爲Elasticsearch系統的開篇學習,Elasticsearch有個特點就是開箱即用,如果是用作學習,或是中小型應用,數據量比較少、操作不是很複雜的話,直接啓動就可以用了。後續的Elasticsearch學習,如無特別說明,均以6.3.1版本爲例。

專注Java高併發、分佈式架構,更多技術乾貨分享與心得,請關注公衆號:Java架構社區
Java架構社區

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