正排索引和倒排索引簡單介紹

    在搜索引擎中,數據被爬取後,就會創建index,方便檢索。html

    在工做中常常會聽到有人問,你這個index是正排的仍是倒排的?那麼什麼是正排呢?什麼又是倒排呢?下面是一些簡單的介紹。git

    網頁A中的內容片斷:github

    Tom is a boy.算法

    Tom is a student too.網絡

 

    網頁B中的內容片斷:搜索引擎

    Jon works at school..net

    Tom's teacher is Jon.3d

 

    正排索引:htm

        正排索引是指文檔ID爲key,表中記錄每一個關鍵詞出現的次數,查找時掃描表中的每一個文檔中字的信息,直到找到全部包含查詢關鍵字的文檔。blog

        假設網頁A的局部文檔ID是 TA, 網頁B的局部文檔ID是 TB。那麼對TA進行正排索引創建的表結構是下面這樣的:

         

 

    從上面的介紹能夠看出,正排是以 docid 做爲索引的,可是在搜索的時候咱們基本上都是用關鍵詞來搜索。因此,試想一下,咱們搜一個關鍵字(Tom),當100個網頁的10個網頁含有Tom這個關鍵字。可是因爲是正排是doc id 做爲索引的,因此咱們不得不把100個網頁都掃描一遍,而後找出其中含有Tom的10個網頁。而後再進行rank,sort等。效率就比較低了。尤爲當如今網絡上的網頁數已經遠遠超過億這個數量後,這種方式如今並不適合做爲搜索的依賴。

    不過與之相比的是,正排這種模式容易維護。因爲是採用doc 做爲key來存儲的,因此新增網頁的時候,只要在末尾新增一個key,而後把詞、詞出現的頻率和位置信息分析完成後就可使用了。

    全部正排的優勢是:易維護;缺點是搜索的耗時太長;

 

    倒排索引:

        因爲正排的耗時太長缺點,倒排就正好相反,是以word做爲關鍵索引。表中關鍵字所對應的記錄表項記錄了出現這個字或詞的全部文檔,一個表項就是一個字表段,它記錄該文檔的ID和字符在該文檔中出現的位置狀況。

        倒排包含兩部分:

            一、由不一樣的索引詞(index term)組成的索引表,稱爲「詞典」(lexicon)。其中包含了各類詞彙,以及這些詞彙的統計信息(如出現頻率nDocs),這些統計信息能夠直接用於各類排名算法。

            二、由每一個索引詞出現過的文檔集合,以及命中位置等信息構成。也稱爲「記錄表」。就是正排索引產生的那張表。固然這部分能夠沒有。具體看本身的業務需求了。

 

            下面是一個簡單的倒排索引構建,只包含第一部分的。

             

 

            倒排的優缺點和正排的優缺點整好相反。倒排在構建索引的時候較爲耗時且維護成本較高,可是搜索耗時短。

 

 

    初步的介紹就先到這。更深刻的研究能夠本身搜索一些資料。

 

參考:

https://blog.csdn.net/zhangzeyuaaa/article/details/48676775

https://blog.csdn.net/GarfieldEr007/article/details/50479074

https://zh.wikipedia.org/zh-hans/%E5%80%92%E6%8E%92%E7%B4%A2%E5%BC%95

https://riteme.github.io/blog/2016-11-29/delta-and-stirling.html(差分序列)

相關文章
相關標籤/搜索