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