Elasticsearch簡(jiǎn)介

前言:這是我一邊學(xué)習(xí)Elasticsearch(版本是5.2.0)一邊寫的博客,以后會(huì)慢慢完善

  • 什么是全文搜索

全文檢索是指計(jì)算機(jī)索引程序通過掃描文章中的每一個(gè)詞,對(duì)每一個(gè)詞建立一個(gè)索引,指明該詞在文章中出現(xiàn)的次數(shù)和位置,當(dāng)用戶查詢時(shí),檢索程序就根據(jù)事先建立的索引進(jìn)行查找,并將查找的結(jié)果反饋給用戶的檢索方式。這個(gè)過程類似于通過字典中的檢索字表查字的過程。全文搜索搜索引擎數(shù)據(jù)庫(kù)中的數(shù)據(jù)。

  • 什么是倒排索引

倒排索引源于實(shí)際應(yīng)用中需要根據(jù)屬性的值來查找記錄。這種索引表中的每一項(xiàng)都包括一個(gè)屬性值和具有該屬性值的各記錄的地址。由于不是由記錄來確定屬性值,而是由屬性值來確定記錄的位置,因而稱為倒排索引(inverted index)。帶有倒排索引的文件我們稱為倒排索引文件,簡(jiǎn)稱倒排文件(inverted file)。

以下摘自其他博客
假設(shè)文檔集合包含五個(gè)文檔,每個(gè)文檔內(nèi)容如圖3-3所示,在圖中最左端一欄是每個(gè)文檔對(duì)應(yīng)的文檔編號(hào)。我們的任務(wù)就是對(duì)這個(gè)文檔集合建立倒排索引。

圖3-3 文檔集合

中文和英文等語言不同,單詞之間沒有明確分隔符號(hào),所以首先要用分詞系統(tǒng)將文檔自動(dòng)切分成單詞序列。這樣每個(gè)文檔就轉(zhuǎn)換為由單詞序列構(gòu)成的數(shù)據(jù)流,為了系統(tǒng)后續(xù)處理方便,需要對(duì)每個(gè)不同的單詞賦予唯一的單詞編號(hào),同時(shí)記錄下哪些文檔包含這個(gè)單詞,在如此處理結(jié)束后,我們可以得到最簡(jiǎn)單的倒排索引(參考圖3-4)。在圖3-4中,“單詞ID”一欄記錄了每個(gè)單詞的單詞編號(hào),第二欄是對(duì)應(yīng)的單詞,第三欄即每個(gè)單詞對(duì)應(yīng)的倒排列表。比如單詞“谷歌”,其單詞編號(hào)為1,倒排列表為{1,2,3,4,5},說明文檔集合中每個(gè)文檔都包含了這個(gè)單詞。


圖3-4 簡(jiǎn)單的倒排索引

之所以說圖3-4所示倒排索引是最簡(jiǎn)單的,是因?yàn)檫@個(gè)索引系統(tǒng)只記載了哪些文檔包含某個(gè)單詞,而事實(shí)上,索引系統(tǒng)還可以記錄除此之外的更多信息。圖3-5是一個(gè)相對(duì)復(fù)雜些的倒排索引,與圖3-4的基本索引系統(tǒng)比,在單詞對(duì)應(yīng)的倒排列表中不僅記錄了文檔編號(hào),還記載了單詞頻率信息(TF),即這個(gè)單詞在某個(gè)文檔中的出現(xiàn)次數(shù),之所以要記錄這個(gè)信息,是因?yàn)樵~頻信息在搜索結(jié)果排序時(shí),計(jì)算查詢和文檔相似度是很重要的一個(gè)計(jì)算因子,所以將其記錄在倒排列表中,以方便后續(xù)排序時(shí)進(jìn)行分值計(jì)算。在圖3-5的例子里,單詞“創(chuàng)始人”的單詞編號(hào)為7,對(duì)應(yīng)的倒排列表內(nèi)容為:(3:1),其中的3代表文檔編號(hào)為3的文檔包含這個(gè)單詞,數(shù)字1代表詞頻信息,即這個(gè)單詞在3號(hào)文檔中只出現(xiàn)過1次,其它單詞對(duì)應(yīng)的倒排列表所代表含義與此相同。

圖3-5 帶有單詞頻率信息的倒排索引

實(shí)用的倒排索引還可以記載更多的信息,圖3-6所示索引系統(tǒng)除了記錄文檔編號(hào)和單詞頻率信息外,額外記載了兩類信息,即每個(gè)單詞對(duì)應(yīng)的“文檔頻率信息”(對(duì)應(yīng)圖3-6的第三欄)以及在倒排列表中記錄單詞在某個(gè)文檔出現(xiàn)的位置信息。

圖3-6 帶有單詞頻率、文檔頻率和出現(xiàn)位置信息的倒排索引

“文檔頻率信息”代表了在文檔集合中有多少個(gè)文檔包含某個(gè)單詞,之所以要記錄這個(gè)信息,其原因與單詞頻率信息一樣,這個(gè)信息在搜索結(jié)果排序計(jì)算中是非常重要的一個(gè)因子。而單詞在某個(gè)文檔中出現(xiàn)的位置信息并非索引系統(tǒng)一定要記錄的,在實(shí)際的索引系統(tǒng)里可以包含,也可以選擇不包含這個(gè)信息,之所以如此,因?yàn)檫@個(gè)信息對(duì)于搜索系統(tǒng)來說并非必需的,位置信息只有在支持“短語查詢”的時(shí)候才能夠派上用場(chǎng)。

以單詞“拉斯”為例,其單詞編號(hào)為8,文檔頻率為2,代表整個(gè)文檔集合中有兩個(gè)文檔包含這個(gè)單詞,對(duì)應(yīng)的倒排列表為:{(3;1;<4>),(5;1;<4>)},其含義為在文檔3和文檔5出現(xiàn)過這個(gè)單詞,單詞頻率都為1,單詞“拉斯”在兩個(gè)文檔中的出現(xiàn)位置都是4,即文檔中第四個(gè)單詞是“拉斯”。

圖3-6所示倒排索引已經(jīng)是一個(gè)非常完備的索引系統(tǒng),實(shí)際搜索系統(tǒng)的索引結(jié)構(gòu)基本如此,區(qū)別無非是采取哪些具體的數(shù)據(jù)結(jié)構(gòu)來實(shí)現(xiàn)上述邏輯結(jié)構(gòu)。

有了這個(gè)索引系統(tǒng),搜索引擎可以很方便地響應(yīng)用戶的查詢,比如用戶輸入查詢?cè)~“Facebook”,搜索系統(tǒng)查找倒排索引,從中可以讀出包含這個(gè)單詞的文檔,這些文檔就是提供給用戶的搜索結(jié)果,而利用單詞頻率信息、文檔頻率信息即可以對(duì)這些候選搜索結(jié)果進(jìn)行排序,計(jì)算文檔和查詢的相似性,按照相似性得分由高到低排序輸出,此即為搜索系統(tǒng)的部分內(nèi)部流程

最后說說Elasticsearche是什么

Elasticsearch是一個(gè)基于Apache Lucene(TM)的開源搜索引擎。無論在開源還是專有領(lǐng)域,Lucene可以被認(rèn)為是迄今為止最先進(jìn)、性能最好的、功能最全的搜索引擎庫(kù)。
但是,Lucene只是一個(gè)庫(kù)。想要使用它,你必須使用Java來作為開發(fā)語言并將其直接集成到你的應(yīng)用中,更糟糕的是,Lucene非常復(fù)雜,你需要深入了解檢索的相關(guān)知識(shí)來理解它是如何工作的。
Elasticsearch也使用Java開發(fā)并使用Lucene作為其核心來實(shí)現(xiàn)所有索引和搜索的功能,但是它的目的是通過簡(jiǎn)單的RESTful API
來隱藏Lucene的復(fù)雜性,從而讓全文搜索變得簡(jiǎn)單。
不過,Elasticsearch不僅僅是Lucene和全文搜索,我們還能這樣去描述它:

  • 分布式的實(shí)時(shí)文件存儲(chǔ),每個(gè)字段都被索引并可被搜索
  • 分布式的實(shí)時(shí)分析搜索引擎
  • 可以擴(kuò)展到上百臺(tái)服務(wù)器,處理PB級(jí)結(jié)構(gòu)化或非結(jié)構(gòu)化數(shù)據(jù)

而且,所有的這些功能被集成到一個(gè)服務(wù)里面,你的應(yīng)用可以通過簡(jiǎn)單的RESTful API,用各種語言的客戶端甚至命令行與之交互。

Elasticsearch的功能####

  1. 分布式的搜索引擎和數(shù)據(jù)分析引擎
  2. 全文檢索,結(jié)構(gòu)化檢索,數(shù)據(jù)分析
  3. 對(duì)海量數(shù)據(jù)進(jìn)行近實(shí)時(shí)的處理

Elasticsearche的特點(diǎn)####

  1. 可以作為一個(gè)大型分布式集群(數(shù)百臺(tái)服務(wù)器)技術(shù),處理PB級(jí)數(shù)據(jù),服務(wù)大公司;也可以運(yùn)行在單機(jī)上,服務(wù)小公司
  2. Elasticsearch不是什么新技術(shù),主要是將全文檢索、數(shù)據(jù)分析以及分布式技術(shù),合并在了一起,才形成了獨(dú)一無二的ES;lucene(全文檢索),商用的數(shù)據(jù)分析軟件(也是有的),分布式數(shù)據(jù)庫(kù)(mycat)
  3. 對(duì)用戶而言,是開箱即用的,非常簡(jiǎn)單,作為中小型的應(yīng)用,直接3分鐘部署一下ES,就可以作為生產(chǎn)環(huán)境的系統(tǒng)來使用了,數(shù)據(jù)量不大,操作不是太復(fù)雜
  4. 數(shù)據(jù)庫(kù)的功能面對(duì)很多領(lǐng)域是不夠用的(事務(wù),還有各種聯(lián)機(jī)事務(wù)型的操作);特殊的功能,比如全文檢索,同義詞處理,相關(guān)度排名,復(fù)雜數(shù)據(jù)分析,海量數(shù)據(jù)的近實(shí)時(shí)處理;Elasticsearch作為傳統(tǒng)數(shù)據(jù)庫(kù)的一個(gè)補(bǔ)充,提供了數(shù)據(jù)庫(kù)所不能提供的很多功能
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容