共計 1598 個字符,預計需要花費 4 分鐘才能閱讀完成。
本篇文章為大家展示了如何理解 Lucene 的簡介與索引過程,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
Lucene 的介紹與使用
Lucene 簡介
Lucene 是 Doug Cutting 利用周末時間所開發(fā)的全文檢索引擎,Doug Cutting 主導開發(fā)了 Lucene 與 Nutch,而基于 Nutch 中分離出的 Hadoop 在 Yahoo 成立 Hadoop 項目組,繼續(xù)主導推動 Hadoop 的研發(fā)。Lucene 不是一個應(yīng)用軟件,而是類似于一個全文檢索的函數(shù)庫,他為應(yīng)用軟件提供了基礎(chǔ)了函數(shù)接口,實現(xiàn)文檔到檢索的 API。
什么是全文檢索?
首先考慮數(shù)據(jù)類型問題。
1. 結(jié)構(gòu)化數(shù)據(jù) 能夠具有固定的格式,長度的數(shù)據(jù)。如數(shù)據(jù)庫。
2. 非結(jié)構(gòu)化數(shù)據(jù) 數(shù)據(jù)無定長, 無嚴格的格式劃分, 無 schema 信息等. 如 日志, 郵件, 文檔等。
解決非結(jié)構(gòu)化的數(shù)據(jù)檢索的問題數(shù)據(jù)庫方式也可以。但是效率較低。那么對于該類日志的使用場景基本上屬于基于內(nèi)容的檢索。
全文檢索的應(yīng)用場景問題
1. 日志分析: 對于沒有定義詳細結(jié)構(gòu)的日志數(shù)據(jù)的分析. 例如基于關(guān)鍵詞查詢。(當前我司的日志數(shù)據(jù)就是這種方式, 日志輸出較為隨意, 通過某些關(guān)鍵詞進行檢索日志中的異常問題)
2. 搜索引擎搜索: 搜索引擎的全文檢索是典型的場景, 同樣是通過關(guān)鍵詞來檢索到爬蟲抓取到的網(wǎng)頁, 文檔等相關(guān)內(nèi)容
3. 電商搜索: 對于電商站內(nèi)的商品進行基于類別, 標題, 內(nèi)容的相關(guān)性商品的檢索等
Lucene 實現(xiàn)全文檢索
基于上圖得到如果需要使用 Lucene 進行全文檢索的整體流程。
基于上圖分解
原始文檔:
原始文檔可以是網(wǎng)頁, 郵件,word 文檔等內(nèi)容. 那么 Lucene 不提供相關(guān)的網(wǎng)頁數(shù)據(jù)的抓取, 但是 Doug Cutting 開發(fā)了 Nutch 提供了網(wǎng)絡(luò)爬蟲的功能。下面介紹一些常見的爬蟲工具
1.1:Nutch: Doug Cutting 開發(fā)的網(wǎng)絡(luò)爬蟲工具, 實現(xiàn)分布式網(wǎng)頁數(shù)據(jù)采集功能。
1.2:Scrapy: Python 領(lǐng)域?qū)I(yè)的爬蟲開發(fā)框架,已經(jīng)完成了常用的爬蟲工具。
1.3:WebMagic:Java 方向基于 Scrapy 的思想開發(fā)的網(wǎng)絡(luò)爬蟲庫, 在 Java 方向有非常高的人氣。…
創(chuàng)建文檔對象:
創(chuàng)建文檔對象是為了能夠?qū)崿F(xiàn)檢索即可獲得到該文檔內(nèi)容。例如搜索引擎搜索 PHP 是世界上最好的語言 即可獲取到某篇網(wǎng)頁內(nèi)容,網(wǎng)頁內(nèi)容即可定義為文檔對象。那么這里我們就把一個網(wǎng)頁定義為一個文檔對象(Document), 每個文檔對象中又包含各種的 Field(標題,內(nèi)容,時間,作者等). 當然在網(wǎng)頁采集中盡量提取能夠獲取到的 Field, 而類似于谷歌, 百度等都會有相應(yīng)的規(guī)則,能夠讓爬蟲程序識別到哪里是 標題, 內(nèi)容等。但是每個文檔都會有唯一的地址, 例如網(wǎng)頁的網(wǎng)址
分析文檔內(nèi)容:
分析文檔內(nèi)容即把文檔中的各種 Field 中的內(nèi)容進行分析,進行分詞、大小寫轉(zhuǎn)換、特殊符號過濾、去除停用詞等使其生成最終的詞匯單元,也就是一個個的單詞。
比如:
PHP 是世界上最好的語言
分詞后的詞匯單元為:
PHP、世界上、最好、語言
每個單詞叫做 Term,不同的 Document、Field 中拆分出不同的 Term。Term 中包含 DOcumentID 與單詞內(nèi)容。
創(chuàng)建索引:
創(chuàng)建索引的目的是為了檢索到相關(guān)的文檔, 所以全文檢索最終的 Term 其實最終要定位到一個 Document。那么簡單來想索引庫中包含的 Term 基本上會有多個 DocumentId 用來定位該 Term 可檢索到的文檔。
簡單的可以為:
TemrsDocumentIdPHPdoc_1,doc_2,doc_3 世界 doc_1,doc_3 語言 doc_2,doc_3
至此 Lucene 的索引即構(gòu)建完成, 索引庫建立即可通過 Lucene 提供的檢索 Api 進行數(shù)據(jù)的檢索。
上述內(nèi)容就是如何理解 Lucene 的簡介與索引過程,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關(guān)注丸趣 TV 行業(yè)資訊頻道。