參考
Lucene學(xué)習(xí)總結(jié)之一:全文檢索的基本原理
Lucene就是這么簡(jiǎn)單
Lucene思維導(dǎo)圖,讓搜索引擎不再難懂
Lucene 是一個(gè)高效的棋返,基于Java 的全文檢索庫(kù)。很多檢索工具蚀苛,比如hibernate search磅甩、solr、elasticsearch都是基于它封裝彩倚、擴(kuò)展出來(lái)的筹我。
簡(jiǎn)單來(lái)說(shuō),lucene 就是一個(gè) jar 包帆离,里面包含了封裝好的各種建立倒排索引的算法代碼蔬蕊。用 Java 開(kāi)發(fā)的時(shí)候,引入 lucene jar哥谷,然后基于 lucene 的 api 去開(kāi)發(fā)岸夯。
通過(guò) lucene,我們可以將已有的數(shù)據(jù)建立索引们妥,lucene 會(huì)在本地磁盤(pán)上面猜扮,給我們組織索引的數(shù)據(jù)結(jié)構(gòu)。
目標(biāo)數(shù)據(jù)對(duì)象
全文數(shù)據(jù)(非結(jié)構(gòu)化數(shù)據(jù))
- 結(jié)構(gòu)化數(shù)據(jù): 指具有固定格式或有限長(zhǎng)度的數(shù)據(jù)监婶,如數(shù)據(jù)庫(kù)旅赢,元數(shù)據(jù)等。
- 非結(jié)構(gòu)化數(shù)據(jù): 指不定長(zhǎng)或無(wú)固定格式的數(shù)據(jù)惑惶,如郵件煮盼,word文檔等。
- 半結(jié)構(gòu)化數(shù)據(jù):如XML带污,HTML等孕似,根據(jù)需要可進(jìn)行不同方式處理。
非結(jié)構(gòu)化數(shù)據(jù)又叫全文數(shù)據(jù)刮刑。
思想
全文數(shù)據(jù)的搜索主要有兩種方法
- 順序掃描(Serial Scanning):比如grep
- 建立索引喉祭,再對(duì)索引進(jìn)行搜索:全文檢索(Full-text Search)
搜索引擎數(shù)據(jù)的特點(diǎn):一次寫(xiě)入+基本不會(huì)修改+多次查詢(xún)。而后者也是一次索引雷绢,多次使用(即便索引也需要不少時(shí)間泛烙,但能大大降低查詢(xún)時(shí)間),所以目前商業(yè)文本搜索應(yīng)用都基于此翘紊。
使用場(chǎng)景
- google蔽氨、百度的搜索:全網(wǎng)、利用爬蟲(chóng)
- Lucene:網(wǎng)頁(yè)內(nèi)/文件內(nèi)
均使用倒排索引
與SQL區(qū)別,SQL搜索的缺點(diǎn)
- SQL只能針對(duì)數(shù)據(jù)庫(kù)表搜索鹉究,不能直接針對(duì)硬盤(pán)上的文本搜索
- SQL沒(méi)有相關(guān)度排名
- SQL搜索結(jié)果沒(méi)有關(guān)健字高亮顯示
- SQL需要數(shù)據(jù)庫(kù)的支持宇立,數(shù)據(jù)庫(kù)本身需要內(nèi)存開(kāi)銷(xiāo)較大
- SQL搜索有時(shí)較慢,尤其是數(shù)據(jù)庫(kù)不在本地時(shí)自赔,超慢
- SQL使用的是數(shù)據(jù)庫(kù)中的內(nèi)存妈嘹,在硬盤(pán)中為DBF文件
- Lucene中存的是一系列的二進(jìn)制壓縮文件和一些控制文件,在硬盤(pán)上绍妨,統(tǒng)稱(chēng)為索引庫(kù)
基本概念
索引庫(kù)(Index)
一個(gè)目錄一個(gè)索引庫(kù)润脸,同一文件夾中的所有的文件構(gòu)成一個(gè)Lucene索引庫(kù)。類(lèi)似數(shù)據(jù)庫(kù)的表的概念他去。
段(Segment)
Lucene索引可能由多個(gè)子索引組成毙驯,這些子索引成為段。每一段都是完整獨(dú)立的索引灾测,能被搜索爆价。
文檔(Document)
一個(gè)索引可以包含多個(gè)段,段與段之間是獨(dú)立的媳搪,添加新文檔可以生成新的段允坚,不同的段可以合并。段是索引數(shù)據(jù)存儲(chǔ)的單元蛾号。類(lèi)似****數(shù)據(jù)庫(kù)內(nèi)的行****或者****文檔數(shù)據(jù)庫(kù)內(nèi)的文檔****的概念稠项。
域(Field)
一篇文檔包含不同類(lèi)型的信息,可以分開(kāi)索引鲜结,比如標(biāo)題展运,時(shí)間,正文精刷,作者等拗胜。類(lèi)似于****數(shù)據(jù)庫(kù)表中的字段****。
詞(Term)
詞是索引的最小單位怒允,是經(jīng)過(guò)詞法分析和語(yǔ)言處理后的字符串埂软。一個(gè)Field由一個(gè)或多個(gè)Term組成。比如標(biāo)題內(nèi)容是“hello lucene”纫事,經(jīng)過(guò)分詞之后就是“hello”勘畔,“l(fā)ucene”,這兩個(gè)單詞就是Term的內(nèi)容信息丽惶,當(dāng)關(guān)鍵字搜索“hello”或者“l(fā)ucene”的時(shí)候這個(gè)標(biāo)題就會(huì)被搜索出來(lái)炫七。