solr中文搜索倒排索引和数据存储结构
solr中文搜索倒排索引和數(shù)據(jù)存儲結(jié)構(gòu)
我們傳統(tǒng)的方式(正排索引)是從關(guān)鍵點出發(fā),然后再通過關(guān)鍵點找到關(guān)鍵點代表的信息中能夠滿足搜索條件的特定信息,既通過KEY尋找VALUE。而Lucene的搜索則是采用了倒排索引的方式,即通過VALUE找KEY。而在中文全文搜索中VALUE就是我們要搜索的單詞,存放所有單詞的地方叫詞典。KEY是文檔標(biāo)號列表(通過文檔標(biāo)號列表我們可以找到出現(xiàn)過要搜索單詞VALUE的文檔)
正排索引從文檔編號找詞:
倒排索引是從詞找文檔編號:
當(dāng)文檔數(shù)據(jù)來臨時,solr會首先對文檔數(shù)據(jù)進(jìn)行分詞,創(chuàng)建索引庫和文檔數(shù)據(jù)庫。所謂的分詞是指:將一段字符文本按照一定的規(guī)則分成若干個單詞。如下面兩篇文檔解釋通過solr后如何產(chǎn)生分詞存儲:
文章中的標(biāo)點符號可以直接過濾掉,像and、too可以直接過濾掉。形成的分詞表表示:
Lucene的倒排索引存儲結(jié)構(gòu)為:詞項的字符串+詞項的文檔頻率+記錄詞項的頻率信息+記錄詞項的位置信息+跳躍偏移量。簡單的理解可以形成以下結(jié)構(gòu):
分別表示詞,詞出現(xiàn)的文檔編號,文檔中出現(xiàn)的頻率和文檔中出現(xiàn)的位置。這樣當(dāng)我們對詞進(jìn)行搜索時,會找到該詞出現(xiàn)過的所有文檔的ID,然后再通過該文檔的ID尋找文檔的具體內(nèi)容。
當(dāng)然,Lucene詞典中詞的順序是按照英文字母的順序排列的,這樣就可以采用壓縮存儲:假設(shè)有term,termagancy,termagant,termina四個詞。每個字母需要1byte的空間,常規(guī)存儲一共需要35byte。而壓縮存儲之后為:“term4agancy8t4inal”,一共需要22byte,節(jié)省大量的空間。
總結(jié)
以上是生活随笔為你收集整理的solr中文搜索倒排索引和数据存储结构的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HashMap源码解析(JDK1.8)
- 下一篇: Zookeeper知识点详解