搜索引擎中的倒排索引是什麼

前言

數據的搜索與查找是計算機軟件的核心算法,對海量文檔進行快速檢索,主要使用的就是倒排索引技術。
可能有人會說,咱們平時在MySQL已經能夠直接使用like查詢了,爲啥還要認識叫倒排索引的東西?web

咱們用下面例子說明,假設有一本書,相應頁碼存儲的文章內容以下算法

頁碼 內容
1 生命在於運動
2 運動是生命的源泉
3 日復一日地堅持練下去吧,只有活動適量才能保持訓練的熱情和提升運動的技能.——塞涅卡
4 活動是生活的基礎!——歌德
5 人的健全,不但靠飲食,尤靠運動
6 奧林匹克的格言是「更高,更快,更強」
7 身體的健康因靜止不動而破壞,因運動練習而長期保持.——蘇格拉底
8 chenqionghe喜歡運動,繩命是如此的精彩,繩命是如此的輝煌

書有不少篇文章,要在一本書中找出全部包含「運動」的文章,只能去一頁頁的翻書,看哪一頁有這個單詞,這種找法實際上是正向索引,即經過文檔(ID)去找單詞。
然而,書越厚,你找的時間越久,由於每次都得找完一本書(這其實也是MySQL中的全表掃描),針對這樣的內容檢索場景,倒排索引就派上用場了。
和正向索引相反,倒排索引是經過單詞去找文檔(ID)。數據庫

1、倒排索引的原理

倒排索引至關於建立了關鍵詞目錄,記錄了哪一個單詞被哪些文章包含,以下apache

關鍵詞 頁碼
運動 1,2,5,8
活動 3,4
生命 1,2
chenqionghe 8

當咱們要搜索找到有「運動」的文章時,先去關鍵詞目錄找,找到在1,2,5,8這幾頁,而後直接把書翻到這些頁就能獲取到相應的內容了。性能優化

若是咱們要搜索「運動生命」,得先把這個分紅「運動」和「生命」,再分別去目錄找(所以怎麼分詞,也是搜索引擎中的一大藝術)。服務器

倒排索引的原理其實就這麼簡單,驚不驚喜,意不意外~框架

2、倒排索引的應用

Lucene

Lucene是目前最爲流行的開放源代碼全文搜索引擎工具包,隸屬於Apache基金會,由資深全文索引/檢索專家Doug Cutting所發起,並以其妻子的中間名做爲項目的名稱。Lucene不是一個具備完整特徵的搜索應用程序,而是一個專一於文本索引和搜索的工具包,可以爲應用程序添加索引與搜索能力。elasticsearch

ElasticSearch

Elasticsearch是一個基於Lucene的搜索服務器。它提供了一個分佈式多用戶能力的全文搜索引擎,基於RESTful web接口。分佈式

Solr

Solr是一個高性能,採用Java開發,基於Lucene的全文搜索服務器,封裝了不少Lucene細節,是一個有HTTP接口的基於Lucene的查詢服務器,

Sphinx

Sphinx是一款基於SQL的高性能全文檢索引擎,利用Sphinx咱們能夠完成比數據庫自己更專業的搜索功能,並且能夠有不少針對性的性能優化。

另外其實MySQL的的全文索引也是基於倒排索引的,能夠參考從零開始學習MySQL全文索引

3、倒排索引和大數據「三駕馬車」的故事

倒排索引是對互聯網內容的一種索引方法,例如咱們使用百度或者谷歌,就是使用搜索詞搜索到對應的互聯網文檔。
說到大數據,咱們想到的是「三駕馬車」,而這「三駕馬車」最先是谷歌在2003年提出的。

1.GFS-海量內容存儲

爲了構建倒排索引,谷歌須要存儲整個互聯網的內容,並存儲構建倒排索引所須要的內容,在之前的技術條件,世界上沒有現成的產品能夠實現這種規模的倒排索引。因此,谷歌發明了谷歌文件系統,基於大量的廉價計算機構建的海量存儲系統,對應「三駕馬車」的分佈式存儲系統GFS,開源實現爲HDFS。

2.MapReduce-海量數據計算框架

從這個GFS中讀取數據作計算,須要一個牛逼的計算框架,這就是「三駕馬車」中的MapReduce,開源實現爲Hadoop MapReduce,後來又出現了Flink、Storm、Spark這樣的新星。

3.BigTable-超級大表

雖然兩駕馬車已經能夠實現存儲互聯網這種海量數據,可是互聯網的內容變化太快,這種系統沒辦法作到增量更新。
這時候,第三駕馬車BigTable出來了,一個Key-Value存儲系統,能夠存儲多個版本的值,對應的開源產品是HBase。

經過這「三駕馬車」,谷歌具有了存儲和分析海量數據的能力,再經過個性化廣告系統不斷地吸金,走在了時代的前沿。當時尚未任何一個公司能在大數據這個領域遇上谷歌,谷歌這個技術也沒有開源。

同時,這「三駕馬車」也是雲計算的重要組成。

後來Hadoop出現了,出現了「三駕馬車」的開源產品:HDFS、MapReduce、HBase。各個公司開始基於Hadoop生態構建出了本身的大數據平臺,谷歌漸漸失去了在大數據時代的先發優點。

4、倒排索引和排序算法PageRank

有了倒排索引,咱們能夠快速獲得了搜索結果,可是怎麼決定搜索結果的優先級?這時候就用到了一種叫PageRank的算法,計算機網頁的權重,按照權重進行排序,權重越高排得越靠前
關於PageRank的原理能夠參考從小白視角理解 <數據挖掘十大算法>

大道至簡,light weight baby !

相關文章
相關標籤/搜索