ElasticSearch入門篇(一)——簡介

剛接觸ElasticSearch不久,還處於學習和探索階段,在剛剛過去的2017年的最後一個月裏,我提交了自己的畢業論文,
在姚老師(姚攀的博客)的幫助下,使用ElasticSearch及其搭配的開發工具Kibana以及head實現了一個新聞搜索引擎,
現把這段時間的學習過程和收穫從頭整理一遍,連載到ElasticSearch入門篇中,
作爲給自己的一個總結,也作爲對姚老師的一個交代,感謝姚老師這些日子對我的幫助和指導。

首推官方學習文檔:https://www.elastic.co/guide/cn/index.html

ElasticSearch是什麼

第一次聽說這個詞還是姚老師對我講的,那時我對ElasticSearch一無所知,現在我在寫我的ElasticSearch學習總結,
有需要更專業的指導的同學可以去訪問他的博客(姚攀的博客)或給他留言或購買他寫的書。

ElasticSearch是一個基於Lucence構建的分佈式的、可擴展的、實時的、開源的全文搜索和數據分析引擎,
也是一個具有良好搜索功能的數據庫。從它的定義中就能很好的瞭解到它的優點。

全文搜索:是指掃描文章中的每一個詞,對每一個詞建立相應的索引,指明該詞出現在哪篇文章中以及出現的頻次,
檢索時程序就能根據這個索引進行相應的查找,顯然這裏會涉及到“分詞”和“倒排索引”的概念,下面會介紹。

這裏寫圖片描述

根據https://db-engines.com/en/ranking官方數據可以看出來,ElasticSearch是使用量第一的搜索引擎,所以值得去學習。

Lucence和倒排索引

Lucence是什麼:Lucence是一個開源的、高性能的全文搜索引擎工具庫,它和ElasticSearch的區別如下:
Lucence只是工具庫,用它能夠實現搜索功能,但是很多代碼需要我們去完成,使用起來非常複雜,
而ElasticSearch是基於Lucence的、用java開發的搜索引擎,它是一個服務,或者說是一款產品,
很多工作它都能幫我們完成而不需要我們去實現,隱藏了Lucence的複雜性。
它們的關係就好像是利用發動機構建一輛汽車。

倒排索引:進行快速的全文搜索的關鍵是構建倒排索引,Lucence使用倒排索引結構,所以ElasticSearch也使用了倒排索引機制,
通過分詞器(需要安裝)獲取每個單詞,然後爲這些單詞構建一個由“單詞”“文檔號”構成的列表,
由於這裏是根據單詞查找它所在的文檔,所以稱爲“倒排”,當然這些工作都不要我們來做,
但是理解搜索的原理非常重要。比如:
文檔1:中國南京
文檔2:南京今天下雨
文檔3:今天需要打傘
則ES構建的倒排索引結構如下:

單詞 文檔號
中國 1
南京 1,2
今天 2,3
下雨 2
需要 3
打傘 3

當搜索“南京”時,程序會返回文檔1和2,當然,實際的分詞過程肯定要比上面複雜的多,但是原理就是這樣。

相關術語

相比於傳統的關係型數據庫,ElasticSearch與它們在相關術語上是有區別的,它們的對應關係如下(來自姚攀的博客):

關係型數據庫(如MySQL) ElasticSearch
數據庫(database) 索引(index)
表(table) 類型(type)
行(row) 文檔(document)
列(column) 字段(field)
模式/表結構(schema) 映射(mapping)
索引 倒排索引
INSERT PUT
DELETE DELETE
UPDATE PUT/POST
SELECT GET

上面表格中的對應關係很直接也很簡單,事實上也是如此。除此之外,ElasticSearch中還有幾個特殊的概念(來自ES官方文檔):

節點:一個運行中的 Elasticsearch 實例稱爲一個 節點。

集羣:集羣是由一個或者多個擁有相同 cluster.name 配置的節點組成, 它們共同承擔數據和負載的壓力。
當有節點加入集羣中或者從集羣中移除節點時,集羣將會重新平均分佈所有的數據。


關於ElasticSearch,我覺得初學階段瞭解檢索機制及其基本概念就可以了,後續在使用過程中會慢慢對這些概念有自己的領悟。

我心心期盼的2018年終於來了,願你我都能擁有美好年華。

這裏寫圖片描述

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