全文檢索lucence之倒排索引

        索引能夠類比一本書的目錄,經過目錄咱們能夠快速定位到想要找的內容。一樣,在數據庫中存儲了海量的數據,經過建立索引,咱們能夠較快速的查詢到指定的內容。java

        一般狀況下,好比傳統的關係型數據庫(RDBMS),常見的有mysql、Oracle,此類數據庫中,咱們建立的索引通常爲正排索引,即存儲(key,value)的數據時,經過對key建立索引,來尋找value。mysql

        與上面的方式不一樣,lucence則是經過value來查找key的方式來建立索引。sql

        lucence是基於java進行開發的。其將資源以Document 爲對象進行存儲,每一個文檔由一些列Field構成。對field建立索引,關聯文檔的惟一id。一般狀況下,當儲存一個新的文檔時,會對文檔數據分詞,即獲取Fields,接着建立倒排索引,其存儲結構爲:詞項的字符串+詞項的文檔頻率+記錄詞項的頻率信息+記錄詞項的位置信息+跳躍偏移量。簡單的理解能夠造成如下結構:數據庫

分別表示詞,詞出現的文檔編號,文檔中出現的頻率和文檔中出現的位置。這樣當咱們對詞進行搜索時,會找到該詞出現過的全部文檔的ID,而後再經過該文檔的ID尋找文檔的具體內容。.net

固然,Lucene詞典中詞的順序是按照英文字母的順序排列的,這樣就能夠採用壓縮存儲:假設有term,termagancy,termagant,termina四個詞。每一個字母須要1byte的空間,常規存儲一共須要35byte。而壓縮存儲以後爲:"term4agancy8t4inal",一共須要22byte,節省大量的空間。
 對象

 

參考資料:https://blog.csdn.net/chunlei_zhang/article/details/38520315blog

相關文章
相關標籤/搜索