全文搜索引擎的設(shè)計(jì)與實(shí)現(xiàn)-畢業(yè)論文_第1頁(yè)
全文搜索引擎的設(shè)計(jì)與實(shí)現(xiàn)-畢業(yè)論文_第2頁(yè)
全文搜索引擎的設(shè)計(jì)與實(shí)現(xiàn)-畢業(yè)論文_第3頁(yè)
全文搜索引擎的設(shè)計(jì)與實(shí)現(xiàn)-畢業(yè)論文_第4頁(yè)
全文搜索引擎的設(shè)計(jì)與實(shí)現(xiàn)-畢業(yè)論文_第5頁(yè)
已閱讀5頁(yè),還剩64頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、 江漢大學(xué)本科畢業(yè)論文(設(shè)計(jì))I作者聲明作者聲明本人鄭重聲明:所呈交的學(xué)位論文是本人在導(dǎo)師的指導(dǎo)下獨(dú)立進(jìn)行研究所取得的研究成果。除了文中特別加以標(biāo)注引用的內(nèi)容外,本論文不包含任何其他個(gè)人或集體已經(jīng)發(fā)表或撰寫(xiě)的成果作品。本人完全了解有關(guān)保障、使用學(xué)位論文的規(guī)定,同意學(xué)校保留并向有關(guān)學(xué)位論文管理機(jī)構(gòu)送交論文的復(fù)印件和電子版。同意省級(jí)優(yōu)秀學(xué)位論文評(píng)選機(jī)構(gòu)將本學(xué)位論文通過(guò)影印、縮印、掃描等方式進(jìn)行保存、摘編或匯編;同意本論文被編入有關(guān)數(shù)據(jù)庫(kù)進(jìn)行檢索和查閱。本學(xué)位論文內(nèi)容不涉及國(guó)家機(jī)密。論文題目:全文搜索引擎的設(shè)計(jì)與實(shí)現(xiàn)作者單位:江漢大學(xué)數(shù)學(xué)與計(jì)算機(jī)科學(xué)學(xué)院作者簽名:XXX 2013 年 5 月 20

2、日 江漢大學(xué)本科畢業(yè)論文(設(shè)計(jì))II學(xué)士學(xué)位論文論文題目 全文搜索引擎的設(shè)計(jì)與實(shí)現(xiàn) (英 文) Full-text search engine design and Implementation 學(xué) 院 數(shù)學(xué)與計(jì)算機(jī)科學(xué)學(xué)院專 業(yè) 計(jì)算機(jī)科學(xué)與技術(shù) 班 級(jí) B09082021 姓 名 XXX 學(xué) 號(hào) 200708202137 指導(dǎo)老師 YYY 2013 年 5 月 20 日 江漢大學(xué)本科畢業(yè)論文(設(shè)計(jì))III摘要摘要 目前定制和維護(hù)搜索引擎的需求越來(lái)越大,對(duì)于處理龐大的網(wǎng)絡(luò)數(shù)據(jù),如何有效的去存儲(chǔ)它并訪問(wèn)到我們需要的信息,變得尤為重要。Web 搜索引擎能有很好的幫助我們解決這一問(wèn)題。本文闡述了一

3、個(gè)全文搜索引擎的原理及其設(shè)計(jì)和實(shí)現(xiàn)過(guò)程。該系統(tǒng)采用 B/S 模式的Java Web 平臺(tái)架構(gòu)實(shí)現(xiàn),采用 Nutch 相關(guān)框架,包括 Nutch,Solr,Hadoop,以及Nutch 的基礎(chǔ)框架 Lucene 對(duì)全網(wǎng)信息的采集和檢索。文中闡述了 Nutch 相關(guān)框架的背景,基礎(chǔ)原理和應(yīng)用。Nutch 相關(guān)框架的出現(xiàn),使得在 java 平臺(tái)上構(gòu)建個(gè)性化搜索引擎成為一件簡(jiǎn)單又可靠的事情。Nutch 致力于讓每個(gè)人能很容易, 同時(shí)花費(fèi)很少就可以配置世界一流的Web 搜索引擎。目前國(guó)內(nèi)有很多大公司,比如百度、雅虎,都在使用 Nutch 相關(guān)框架。由于 Nutch 是開(kāi)源的,閱讀其源代碼,可以讓我們對(duì)搜

4、索引擎實(shí)現(xiàn)有更加深刻的感受,并且能夠更加深度的定制需要的搜索引擎實(shí)現(xiàn)細(xì)節(jié)。本文首先介紹了課題研究背景,然后對(duì)系統(tǒng)涉及到的理論知識(shí),框架的相關(guān)理論做了詳細(xì)說(shuō)明,最后按照軟件工程的開(kāi)發(fā)方法逐步實(shí)現(xiàn)系統(tǒng)功能。關(guān)鍵詞關(guān)鍵詞Nutch、Solr、Hadoop、Lucene、搜索引擎 江漢大學(xué)本科畢業(yè)論文(設(shè)計(jì))IVAbstractCurrently, the requirement of customizing and the search engine maintenance is larger and larger. For dealing with such enormous network da

5、ta, especially, how to store it and access our necessary information has become so significant. However,web search engine can help us to solve this problem well.This acticle describes the principle of full-text search engine,and the process for its design and implementation. This system adopts Java

6、Web platform with B/S model, and also the relative frame of Nutch, including Nutch,Solr,Hadoop, and collection and inspection for whole network information based on Lucene-the foundation of Nutch. All in all, this text mainly elaborates the backgroud of relative frame, basical principle, and applica

7、tion for Nutch.The appearance of Nutch related framework, makes that building an personalized search engine based on Java platform to be an simple and reliable way. Nutch is committed to make everyone configure a word-class web search engine easily and low-costly.At present, there are many big compa

8、nies at home, like baidu, yahoo, are using such Nutch relative frame. Due to the fact that Nutch is open-source, reading its source code can let us have a more profound experience when realizing the search engine, and at the same time, can custojmize the needed details for realizing the seach engine

9、 deeply. At frist, this article introduces the background of research project. Then, it specifically describes the theoretical knowledge of system and the related theory of framework. Finally, it achieves the system function step by step according to the development method of software engineering.Ke

10、ywordsNutch、Solr、Hadoop、Lucene、Search Engine 江漢大學(xué)本科畢業(yè)論文(設(shè)計(jì))V目錄1 1 緒論緒論 .1 11.1 課題背景及介紹.11.2 課題研究目的及應(yīng)用.11.3 課題研究范圍.11.4 小結(jié).22 2 搜索引擎相關(guān)理論研究搜索引擎相關(guān)理論研究 .3 32.1 WEB搜索引擎原理和結(jié)構(gòu).32.1.1 搜索引擎三段式工作流程.32.1.2 搜索引擎整體結(jié)構(gòu).42.2 網(wǎng)頁(yè)收集.52.1.2 爬蟲(chóng)的工作流程.52.1.3 爬蟲(chóng)的抓取策略.52.1.4 鏈接數(shù)據(jù)庫(kù)的建立.62.1.5 鏈接數(shù)據(jù)庫(kù)的更新.62.3 網(wǎng)頁(yè)預(yù)處理.62.3.1 建立索引頁(yè)面

11、庫(kù).72.3.2 分詞.92.3.3 倒排索引.102.4 查詢服務(wù).122.4.1 查詢方式和匹配.122.4.2 結(jié)果排序.132.4.3 文檔摘要.142.5 小結(jié).153 3 NUTCHNUTCH 相關(guān)框架研究相關(guān)框架研究.16163.1 LUCENE研究 .163.1.1 Lucene 概述 .163.1.2 Lucene 如何對(duì)索引進(jìn)行搜索 .163.1.3 Lucene 增刪改索引的 API.173.2 NUTCH研究 .213.2.1 Nutch 概述 .213.2.2 研究 Nutch 的原因.213.2.3 研究 Nutch 的目標(biāo).223.2.4 Nutch 和 Luce

12、ne 比較.223.2.5 Nutch 常用命令 .223.3 SOLR研究.283.3.1 Solr 概述 .283.3.2 Solr 索引 .28 江漢大學(xué)本科畢業(yè)論文(設(shè)計(jì))VI3.3.3 Solr 搜索 .293.3.4 Lucene 索引查看工具 Luke.313.4 HADOOP研究 .323.4.1 Hadoop 概述 .323.4.2 Hadoop 單機(jī)本地模式 .343.4.3 Hadoop 單機(jī)偽分布式模式 .343.5 小結(jié).364 4 全文搜索引擎系統(tǒng)分析與技術(shù)選型全文搜索引擎系統(tǒng)分析與技術(shù)選型 .37374.1 系統(tǒng)目標(biāo)需求.374.2 系統(tǒng)功能項(xiàng).374.3 可行性

13、分析與決策.374.3.1 技術(shù)可行性.384.3.2 經(jīng)濟(jì)可行性.384.4 小結(jié).395 5 全文搜索引擎系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)全文搜索引擎系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn) .40405.1 系統(tǒng)功能圖.405.2 系統(tǒng)實(shí)體設(shè)計(jì).405.2.1 實(shí)體.405.2.2 實(shí)體的屬性.415.2.3 實(shí)體間的聯(lián)系.425.3 系統(tǒng)實(shí)現(xiàn).425.3.1 系統(tǒng)需要的環(huán)境.425.3.2 系統(tǒng)中 Nutch 的配置.435.3.3 對(duì)整個(gè)網(wǎng)絡(luò)進(jìn)行抓取.445.3.4 Solr 安裝配置和使用 .475.3.5 給 Solr 4.2 添加 mmseg4j .485.3.6 客戶端應(yīng)用程序的實(shí)現(xiàn).495.4 小結(jié).566 6 全文

14、搜索引擎系統(tǒng)評(píng)價(jià)全文搜索引擎系統(tǒng)評(píng)價(jià) .57576.1 系統(tǒng)特色.576.2 系統(tǒng)存在的不足和解決方案.576.2.1 系統(tǒng)存在的不足.576.2.2 改進(jìn)措施.586.2.3 畢業(yè)設(shè)計(jì)心得與收獲.587 7 結(jié)束語(yǔ)結(jié)束語(yǔ) .5959致謝致謝 .6060參考文獻(xiàn)參考文獻(xiàn) .6161 江漢大學(xué)本科畢業(yè)論文(設(shè)計(jì))11 緒論1.1 課題背景及介紹隨著互聯(lián)網(wǎng)的快速發(fā)展,越來(lái)越豐富的信息呈現(xiàn)在用戶面前,但同時(shí)伴隨的問(wèn)題是用戶越來(lái)越難以獲得其最需要的信息。為了解決此問(wèn)題,出現(xiàn)了網(wǎng)絡(luò)搜索引擎。網(wǎng)絡(luò)搜索引擎中以基于 WWW 的搜索引擎應(yīng)用范圍最為廣泛。網(wǎng)絡(luò)搜索引擎是指對(duì) WWW 站點(diǎn)資源和其它資源進(jìn)行索引和

15、檢索的一類檢索機(jī)制。 全文搜索引擎是目前最為普及的應(yīng)用 ,通過(guò)從互聯(lián)網(wǎng)上提取各個(gè)網(wǎng)站的信息(以網(wǎng)頁(yè)文字為主)建立數(shù)據(jù)庫(kù),用戶查詢的時(shí)候便在數(shù)據(jù)庫(kù)中檢索與用戶查詢條件相匹配的記錄,最終將匹配的那些記錄,按一定的排列順序顯示給用戶。國(guó)外具代表性的全文檢索搜索引擎有 Google、 Yahoo、 Bing 等 ,國(guó)內(nèi)著名的有百度、中搜等。目前網(wǎng)絡(luò)中的資源非常豐富,但是如何有效的搜索信息卻是一件困難的事情。建立搜索引擎就是解決這個(gè)問(wèn)題的最好方法之一。該課題要求設(shè)計(jì)一個(gè) Web 應(yīng)用程序,學(xué)習(xí)搜索引擎的基本原理和設(shè)計(jì)方法,應(yīng)用開(kāi)源的全文搜索引擎 Lucene 框架和 Lucene的子項(xiàng)目 Nutch 實(shí)

16、現(xiàn)一個(gè)全文搜索引擎。1.2 課題研究目的及應(yīng)用 針對(duì)搜索引擎廣闊的應(yīng)用前景以及分析國(guó)內(nèi)外搜索引擎的發(fā)展現(xiàn)狀,根據(jù)搜索引擎系統(tǒng)的工作原理設(shè)計(jì)一種基于 Internet 的全文搜索引擎模型,它從互聯(lián)網(wǎng)上獲取網(wǎng)頁(yè),建立索引數(shù)據(jù)庫(kù),并采用數(shù)據(jù)庫(kù)管理作業(yè)和多線程技術(shù)以提高全文搜索的性能和效率,從技術(shù)上可以適用于任何有全文搜索需求的應(yīng)用。1.3 課題研究范圍一般來(lái)說(shuō)搜索引擎都由:用戶接口,搜索器,索引生成器和查詢處理器 4 個(gè)部分組成。 用戶接口的作用是輸入用戶查詢、顯示查詢結(jié)果、提供用戶相關(guān)性反饋機(jī)制。主要的目的是方便用戶使用搜索引擎,高效率、多方式地從搜索引擎中得到有效、及時(shí)的信息。用戶接口的設(shè)計(jì)和實(shí)

17、現(xiàn)使用人機(jī)交互的理論和方法,以充分適應(yīng)人類的思維習(xí)慣。 江漢大學(xué)本科畢業(yè)論文(設(shè)計(jì))2搜索器用于 WWW 的遍歷和網(wǎng)頁(yè)的下載。從一個(gè)起始 URL 集合開(kāi)始,順著這些 URL中的超鏈(Hyperlink),以寬度優(yōu)先、深度優(yōu)先或啟發(fā)式方式循環(huán)地在互聯(lián)網(wǎng)中發(fā)現(xiàn)信息。 索引生成器對(duì)搜索器收集到的網(wǎng)頁(yè)和相關(guān)的描述信息經(jīng)索引組織后存儲(chǔ)在索引庫(kù)中。 查詢處理器的功能是根據(jù)用戶的查詢?cè)谒饕龓?kù)中快速檢出文檔,進(jìn)行文檔與查詢的相關(guān)度評(píng)價(jià), 對(duì)將要輸出的結(jié)果進(jìn)行排序,并實(shí)現(xiàn)某種用戶相關(guān)性反饋機(jī)制。1.4 小結(jié)本章內(nèi)容主要介紹了課題背景,課題目的,及課題的研究方法與內(nèi)容這些方面。闡述了搜索引擎在顯示應(yīng)用中的重要性,

18、目前全文搜索引擎的工作組成部分以及各個(gè)工作組成部分到底是什么。下面將具體介紹全文搜索引擎的相關(guān)理論,使讀者全文搜索引擎的基本技術(shù)有所了解,為后續(xù)章節(jié)的閱讀打下基礎(chǔ)。 江漢大學(xué)本科畢業(yè)論文(設(shè)計(jì))32 搜索引擎相關(guān)理論研究2.1 Web搜索引擎原理和結(jié)構(gòu)全文搜索引擎是一款網(wǎng)絡(luò)應(yīng)用軟件系統(tǒng),論文中全部以搜索引擎稱。最基本的搜索引擎應(yīng)該包含三個(gè)模塊:網(wǎng)頁(yè)搜集,預(yù)處理,查詢服務(wù)。事實(shí)上,這三個(gè)部分是相互獨(dú)立、分別工作的,主要的關(guān)系體現(xiàn)在前一部分得到的數(shù)據(jù)結(jié)果為后一部分提供原始數(shù)據(jù)。2.1.1 搜索引擎三段式工作流程三者的關(guān)系如圖 2-1:圖 2-1 搜索引擎三段式工作流程在介紹搜索引擎的整體結(jié)構(gòu)之前,

19、現(xiàn)在借鑒計(jì)算機(jī)網(wǎng)絡(luò)自頂向下的方法描述因特網(wǎng)特色一書(shū)的敘事方法,從普通用戶使用搜索引擎的角度來(lái)介紹搜索引擎的具體工作流程。自頂向下的方法描述搜索引擎執(zhí)行過(guò)程:1用戶通過(guò)瀏覽器提交查詢的詞或者短語(yǔ) P,搜索引擎根據(jù)用戶的查詢返回匹配的網(wǎng)頁(yè)信息列表 L;2. 上述過(guò)程涉及到兩個(gè)問(wèn)題,如何匹配用戶的查詢以及網(wǎng)頁(yè)信息列表從何而來(lái),根據(jù)什么而排序?用戶的查詢 P 經(jīng)過(guò)分詞器被切割成小詞組 并被剔除停用詞 ( 的、了、啊等字 ),根據(jù)系統(tǒng)維護(hù)的一個(gè)倒排索引可以查詢某個(gè)詞 pi 在哪些網(wǎng)頁(yè)中出現(xiàn)過(guò),匹配那些 都出現(xiàn)的網(wǎng)頁(yè)集即可作為初始結(jié)果,更進(jìn)一步,返回的初始網(wǎng)頁(yè)集通過(guò)計(jì)算與查詢?cè)~的相關(guān)度從而得到網(wǎng)頁(yè)排名,即

20、 Page 江漢大學(xué)本科畢業(yè)論文(設(shè)計(jì))4Rank,按照網(wǎng)頁(yè)的排名順序即可得到最終的網(wǎng)頁(yè)列表;3. 假設(shè)分詞器和網(wǎng)頁(yè)排名的計(jì)算公式都是既定的,那么倒排索引以及原始網(wǎng)頁(yè)集從何而來(lái)?原始網(wǎng)頁(yè)集在之前的數(shù)據(jù)流程的介紹中,可以得知是由爬蟲(chóng) spider 爬取網(wǎng)頁(yè)并且保存在本地的,而倒排索引,即詞組到網(wǎng)頁(yè)的映射表是建立在正排索引的基礎(chǔ)上的,后者是分析了網(wǎng)頁(yè)的內(nèi)容并對(duì)其內(nèi)容進(jìn)行分詞后,得到的網(wǎng)頁(yè)到詞組的映射表,將正排索引倒置即可得到倒排索引;4. 網(wǎng)頁(yè)的分析具體做什么呢?由于爬蟲(chóng)收集來(lái)的原始網(wǎng)頁(yè)中包含很多信息,比如 html 表單以及一些垃圾信息比如廣告,網(wǎng)頁(yè)分析去除這些信息,并抽取其中的正文信息作為后續(xù)

21、的基礎(chǔ)數(shù)據(jù)。2.1.2 搜索引擎整體結(jié)構(gòu)圖 2-2 搜索引擎整體結(jié)構(gòu)爬蟲(chóng)從 Internet 中爬取眾多的網(wǎng)頁(yè)作為原始網(wǎng)頁(yè)庫(kù)存儲(chǔ)于本地,然后網(wǎng)頁(yè)分析器抽取網(wǎng)頁(yè)中的主題內(nèi)容交給分詞器進(jìn)行分詞,得到的結(jié)果用索引器建立正排和倒排索引,這樣就得到了索引數(shù)據(jù)庫(kù),用戶查詢時(shí),在通過(guò)分詞器切割輸入的查詢?cè)~組并通過(guò)檢索器在索引數(shù)據(jù)庫(kù)中進(jìn)行查詢,得到的結(jié)果返回給用戶。 江漢大學(xué)本科畢業(yè)論文(設(shè)計(jì))5無(wú)論搜索引擎的規(guī)模大小,其主要結(jié)構(gòu)都是由這幾部分構(gòu)成的,并沒(méi)有大的差別,搜索引擎的好壞主要是決定于各部分的內(nèi)部實(shí)現(xiàn)。有了上述的對(duì)與搜索引擎的整體了解,下面對(duì)搜索引擎的各個(gè)模塊進(jìn)行說(shuō)明。2.2 網(wǎng)頁(yè)收集全文檢索是工作在

22、某個(gè)數(shù)據(jù)集合上的程序,他需要事先由頁(yè)面抓取程序,在全網(wǎng)中抓取海量網(wǎng)頁(yè),這個(gè)抓取程序也叫網(wǎng)絡(luò)爬蟲(chóng)或 Spider。只有事先抓取了足夠多的網(wǎng)頁(yè)數(shù)據(jù),并處理之,才能對(duì)大量的用戶查詢提供及時(shí)的響應(yīng)。2.1.2 爬蟲(chóng)的工作流程網(wǎng)頁(yè)收集的過(guò)程如同圖的遍歷,其中網(wǎng)頁(yè)就作為圖中的節(jié)點(diǎn),而網(wǎng)頁(yè)中的超鏈接則作為圖中的邊,通過(guò)某網(wǎng)頁(yè)的超鏈接 得到其他網(wǎng)頁(yè)的地址,從而可以進(jìn)一步的進(jìn)行網(wǎng)頁(yè)收集;圖的遍歷分為廣度優(yōu)先和深度優(yōu)先兩種方法,網(wǎng)頁(yè)的收集過(guò)程也是如此。綜上,Spider 收集網(wǎng)頁(yè)的過(guò)程如下:從初始 URL 集合獲得目標(biāo)網(wǎng)頁(yè)地址,通過(guò)網(wǎng)絡(luò)連接接收網(wǎng)頁(yè)數(shù)據(jù),將獲得的網(wǎng)頁(yè)數(shù)據(jù)添加到網(wǎng)頁(yè)庫(kù)中并且分析該網(wǎng)頁(yè)中的其他 URL

23、 鏈接,放入未訪問(wèn) URL 集合中用于網(wǎng)頁(yè)收集。下圖表示了這個(gè)過(guò)程:圖 2-3 Spider 工作流程2.1.3 爬蟲(chóng)的抓取策略爬蟲(chóng)的工作策略一般分為累積式抓?。╟umulative crawling)和增量式抓?。╥ncremental crawing)兩種。 江漢大學(xué)本科畢業(yè)論文(設(shè)計(jì))6累積式抓取是指從某一個(gè)時(shí)間點(diǎn)開(kāi)始,通過(guò)遍歷的方式抓取系統(tǒng)所能允許存儲(chǔ)和處理的所有網(wǎng)頁(yè)。在理想的軟硬件環(huán)境下,經(jīng)過(guò)足夠的運(yùn)行時(shí)間,積累是抓取策略可以保證抓取到相當(dāng)規(guī)模的網(wǎng)頁(yè)集合。但由于 Web 數(shù)據(jù)的動(dòng)態(tài)特性,集合中的網(wǎng)頁(yè)的抓取時(shí)間點(diǎn)是不同的,頁(yè)面被更新的情況也不同,因此累積式抓取到的網(wǎng)頁(yè)集合事實(shí)上并無(wú)法與

24、真實(shí)環(huán)境中的網(wǎng)絡(luò)數(shù)據(jù)保持一致。與累積式抓取不同,增量式抓取是指在具有一定量規(guī)模的網(wǎng)頁(yè)集合的基礎(chǔ)上,采用更新數(shù)據(jù)的方式選取已有集合中的過(guò)時(shí)頁(yè)面進(jìn)行抓取,以保證所抓取的數(shù)據(jù)與真實(shí)網(wǎng)絡(luò)數(shù)據(jù)足夠接近。進(jìn)行增量式抓取的前提是,系統(tǒng)已經(jīng)抓取了足夠數(shù)量的網(wǎng)絡(luò)頁(yè)面,并具有這項(xiàng)頁(yè)面被抓取的時(shí)間信息。面對(duì)實(shí)際應(yīng)用環(huán)境的網(wǎng)絡(luò)蜘蛛設(shè)計(jì)中,通常既包含累積式抓取,也包括增量式抓取的策略。累積式抓取一般用戶數(shù)據(jù)集合的整體建立或大規(guī)模更新階段;而增量式抓取則主要針對(duì)數(shù)據(jù)集合的日常維護(hù)和及時(shí)更新。2.1.4 鏈接數(shù)據(jù)庫(kù)的建立初始 URL 的建立有兩種方式:超鏈接和站長(zhǎng)提交。超鏈接:爬蟲(chóng)會(huì)根據(jù)種子地址(可能是最先提交給爬蟲(chóng)的 U

25、RL 集合)抓取頁(yè)面。站長(zhǎng)提交:在實(shí)際運(yùn)行中,爬蟲(chóng)不可能抓取所有的站點(diǎn),為此,網(wǎng)站站長(zhǎng)可以向搜索引擎進(jìn)行提交,要求收錄,搜索引擎經(jīng)過(guò)核查后,便將該網(wǎng)站加入到 URL 集合中,進(jìn)行抓取。2.1.5 鏈接數(shù)據(jù)庫(kù)的更新鏈接的注入:抓取程序會(huì)根據(jù)預(yù)先提供的 URL 集合進(jìn)行標(biāo)準(zhǔn)化,根據(jù)設(shè)定的正則檢驗(yàn)來(lái)過(guò)濾 URL,將這些符合標(biāo)準(zhǔn)的 URL 放入到 map 中,并在構(gòu)造 map 過(guò)程中給 URL 初始化得分,分?jǐn)?shù)可以影響 URL 對(duì)應(yīng)主機(jī)的搜索排序和采集優(yōu)先級(jí)。接著會(huì)判斷 URL 在抓取數(shù)據(jù)庫(kù)中是否存在,如果存在,刪除舊的,更新新的。如果不存在,將該 URL 的狀態(tài)標(biāo)記為未采集過(guò)。URL 生成器:從抓取

26、回來(lái)的網(wǎng)頁(yè)中,將符合條件的 URL 提出出來(lái),檢測(cè) URL 是否在有效更新時(shí)間里面,并將 URL 載入相應(yīng)的任務(wù)組,計(jì)算 URL 的 hash 值,搜集 URL,直至達(dá)到規(guī)定的廣度。 江漢大學(xué)本科畢業(yè)論文(設(shè)計(jì))72.3 網(wǎng)頁(yè)預(yù)處理網(wǎng)頁(yè)預(yù)處理的主要目標(biāo)是將原始網(wǎng)頁(yè)通過(guò)一步步的數(shù)據(jù)處理變成可方便搜索的數(shù)據(jù)形式。預(yù)處理模塊的整體結(jié)構(gòu)如下: 圖 2-4 預(yù)處理模塊的整體結(jié)構(gòu)通過(guò)爬蟲(chóng)的收集,保存下來(lái)的網(wǎng)頁(yè)信息具有較好的信息存儲(chǔ)格式,但是還是有一個(gè)缺點(diǎn),就是不能按照網(wǎng)頁(yè) URL 直接定位到所指向的網(wǎng)頁(yè)。所以,需要先建立網(wǎng)頁(yè)的索引,如此通過(guò)索引,這樣可以很方便的從原始網(wǎng)頁(yè)庫(kù)中獲得某個(gè) URL 對(duì)應(yīng)的頁(yè)面信

27、息。之后,處理網(wǎng)頁(yè)數(shù)據(jù),對(duì)于一個(gè)網(wǎng)頁(yè),首先需要提取其網(wǎng)頁(yè)正文信息,其次對(duì)正文信息進(jìn)行分詞,之后再根據(jù)分詞的情況建立索引和倒排索引,這樣,網(wǎng)頁(yè)的預(yù)處理也全部完成。2.3.1 建立索引頁(yè)面庫(kù)索引的主要過(guò)程: 江漢大學(xué)本科畢業(yè)論文(設(shè)計(jì))8圖 2-5 索引的主要過(guò)程索引過(guò)程可分為三個(gè)主要的操作階段:將數(shù)據(jù)轉(zhuǎn)換成文本分析文本將分析過(guò)的文本保存到數(shù)據(jù)庫(kù)中轉(zhuǎn)換成文本。在索引數(shù)據(jù)之前,首先必須將數(shù)據(jù)轉(zhuǎn)換成純文本字符流。但是,在現(xiàn)實(shí)世界中,信息多以富媒體文檔格式呈現(xiàn):PDF,WORD,EXCEL,HTML,XML 等。為此需要使用文檔解析器,將富媒體轉(zhuǎn)換成純文字字符流。分析文本。在對(duì)數(shù)據(jù)進(jìn)行索引錢,還必須進(jìn)行

28、預(yù)處理,對(duì)數(shù)據(jù)進(jìn)行分析是之更加適合被索引。分析數(shù)據(jù)時(shí),現(xiàn)將文本數(shù)據(jù)切分成一些大塊或者詞匯單元,然后對(duì)它們執(zhí)行一些可選的操作,例如:在索引之前將這些詞匯單元轉(zhuǎn)換成小寫(xiě),使得搜索對(duì)大小寫(xiě)不敏感;具有代表性的是要從輸入中去掉一些使用很頻繁但卻沒(méi)有實(shí)際意義的詞,比如英文文本中的一些停用詞(a、an、the、in、on 等)。同樣的,也需要分析輸入的詞匯單元,一遍從詞語(yǔ)中去掉一些不必要的字母以找到他們的詞干。這一處理過(guò)程稱為分析。將分析后的數(shù)據(jù)寫(xiě)入索引。對(duì)輸入數(shù)據(jù)分析處理完成后,就可以將結(jié)果寫(xiě)入索引文件中。結(jié)果一般包括網(wǎng)頁(yè)標(biāo)題,正文,所屬住地址,主機(jī),內(nèi)容摘要,時(shí)間戳,當(dāng)前 URL 地址等,并更具具體需

29、要建立索引和存儲(chǔ)。 江漢大學(xué)本科畢業(yè)論文(設(shè)計(jì))92.3.2 分詞中文分詞是指將一個(gè)漢字序列切分成一個(gè)一個(gè)單獨(dú)的詞,從而達(dá)到計(jì)算機(jī)可以自動(dòng)識(shí)別的效果。中文分詞主要有三種方法:第一種基于字符串匹配,第二種基于語(yǔ)義理解,第三種基于統(tǒng)計(jì)。由于第二和第三種的實(shí)現(xiàn)需要大量的數(shù)據(jù)來(lái)支持,一般采用的是基于字符串匹配的方法?;谧址ヅ涞姆椒ㄓ纸凶鰴C(jī)械分詞方法,它是按照一定的策略將待分析的漢字串與一個(gè)“充分大的”機(jī)器詞典中的詞條進(jìn)行配,若在詞典中找到某個(gè)字符串,則匹配成功(識(shí)別出一個(gè)詞)。按照掃描方向的不同,串匹配分詞方法可以分為正向匹配和逆向匹配;按照不同長(zhǎng)度優(yōu)先匹配的情況,可以分為最大(最長(zhǎng))匹配和最小

30、(最短)匹配。常用的幾種機(jī)械分詞方法如下:正向減字最大匹配法(由左到右的方向);逆向減字最大匹配法(由右到左的方向);最少切分(使每一句中切出的詞數(shù)最?。?;雙向最大減字匹配法(進(jìn)行由左到右、由右到左兩次掃描);采用其中的正向最大匹配法。算法描述如下:輸入值為一個(gè)中文語(yǔ)句 S,以及最大匹配詞 n取 S 中前 n 個(gè)字,根據(jù)詞典對(duì)其進(jìn)行匹配,若匹配成功,轉(zhuǎn) 3,否則轉(zhuǎn) 2;n = n 1:如果 n 為 1,轉(zhuǎn) 3;否則轉(zhuǎn) 1;將 S 中的前 n 個(gè)字作為分詞結(jié)果的一部分,S 除去前 n 個(gè)字,若 S 為空,轉(zhuǎn) 4;否則,轉(zhuǎn) 1;算法結(jié)束。需要說(shuō)明的是,在第三步的起始,n 如果不為 1,則意味著有匹

31、配到的詞;而如果 n 為 1,默認(rèn) 1 個(gè)字是應(yīng)該進(jìn)入分詞結(jié)果的,所以第三步可以將前 n 個(gè)字作為一個(gè)詞而分割開(kāi)來(lái)。還有需要注意的是對(duì)于停用詞的過(guò)濾,停用詞即漢語(yǔ)中“的,了,和,么”等字詞,在搜索引擎中是忽略的,所以對(duì)于分詞后的結(jié)果,需要在用停用詞列表進(jìn)行一下停用詞過(guò)濾。您也許有疑問(wèn),如何獲得分詞字典或者是停用詞字典。停用詞字典比較好辦,由于中文停用詞數(shù)量有限,可以從網(wǎng)上獲得停用詞列表,從而自己建一個(gè)停用詞字典;然而對(duì)于分詞字典,雖然網(wǎng)上有許多知名的漢字分詞軟件,但是很少有分詞的字典提供。在程序使用過(guò)程中,分詞字典可以放入一個(gè)集合中,這樣就可以比較方便的進(jìn)行比對(duì)工作。 江漢大學(xué)本科畢業(yè)論文(設(shè)

32、計(jì))10分詞的結(jié)果對(duì)于搜索的精準(zhǔn)性有著至關(guān)重要的影響,好的分詞策略經(jīng)常是由若干個(gè)簡(jiǎn)單算法拼接而成的,所以您也可以試著實(shí)現(xiàn)雙向最大減字匹配法來(lái)提高分詞的準(zhǔn)確率。而如果遇到歧義詞組,可以通過(guò)字典中附帶的詞頻來(lái)決定哪種分詞的結(jié)果更好。2.3.3 倒排索引倒排索引(英語(yǔ):Inverted index),也常被稱為反向索引、置入檔案或反向檔案,是一種索引方法,被用來(lái)存儲(chǔ)在全文搜索下某個(gè)單詞在一個(gè)文檔或者一組文檔中的存儲(chǔ)位置的映射。它是文檔索引系統(tǒng)中最常用的數(shù)據(jù)結(jié)構(gòu)。有兩種不同的反向索引形式:一條記錄的水平反向索引(或者反向檔案索引)包含每個(gè)引用單詞的文檔的列表。一個(gè)單詞的水平反向索引(或者完全反向索引)

33、又包含每個(gè)單詞在一個(gè)文檔中的位置。后者的形式提供了更多的兼容性(比如短語(yǔ)搜索),但是需要更多的時(shí)間和空間來(lái)創(chuàng)建。下面將以圖示和實(shí)例的方式分別說(shuō)明正向索引和倒排索引。 圖 2-6 正向索引 江漢大學(xué)本科畢業(yè)論文(設(shè)計(jì))11圖 2-7 倒排索引 以英文為例,下面是要被索引的文本:it is what it iswhat is itit is a banana這樣就能得到下面的反向文件索引: a: 2 banana: 2 is: 0, 1, 2 it: 0, 1, 2 what: 0, 1檢索的條件what, is 和 it 將對(duì)應(yīng)這個(gè)集合:。對(duì)相同的文字,得到后面這些完全反向索引,有文檔數(shù)量和當(dāng)前

34、查詢的單詞結(jié)果組成的的成對(duì)數(shù)據(jù)。 同樣,文檔數(shù)量和當(dāng)前查詢的單詞結(jié)果都從零開(kāi)始。所以,banana: (2, 3) 就是說(shuō) banana在第三個(gè)文檔里 (),而且在第三個(gè)文檔的位置是第四個(gè)單詞(地址為 3)。a: (2, 2)banana: (2, 3)is: (0, 1), (0, 4), (1, 1), (2, 1) 江漢大學(xué)本科畢業(yè)論文(設(shè)計(jì))12it: (0, 0), (0, 3), (1, 2), (2, 0) what: (0, 2), (1, 0)如果執(zhí)行短語(yǔ)搜索what is it 將得到這個(gè)短語(yǔ)的全部單詞各自的結(jié)果所在文檔為文檔 0 和文檔 1。但是這個(gè)短語(yǔ)檢索的連續(xù)的條件僅

35、僅在文檔 1 得到。2.4 查詢服務(wù)查詢服務(wù)的整體結(jié)構(gòu)如下:圖 2-8 查詢服務(wù)的整體結(jié)構(gòu) 在網(wǎng)頁(yè)預(yù)處理后,每個(gè)元素至少包含如下幾個(gè)方面:原始網(wǎng)頁(yè)文檔URL 和標(biāo)題編號(hào)所含的重要關(guān)鍵詞的集合(以及他們?cè)谖臋n中出現(xiàn)的位置信息)其他一些指標(biāo)(例如重要程度,分類代碼等)而系統(tǒng)關(guān)鍵詞總體的集合和文檔的編號(hào)一起構(gòu)成了一個(gè)倒排文件結(jié)構(gòu),使得一旦得到一個(gè)關(guān)鍵詞輸入,系統(tǒng)能迅速給出相關(guān)文檔編號(hào)的集合輸出。 2.4.1 查詢方式和匹配查詢方式指的是系統(tǒng)允許用戶提交查詢的形式??紤]到各種用戶的不同背景和不 江漢大學(xué)本科畢業(yè)論文(設(shè)計(jì))13同的信息需求不可能有一種普適的方式。一般認(rèn)為,對(duì)于普通網(wǎng)絡(luò)用戶來(lái)說(shuō),最自然的

36、方式就是“要什么就輸入什么”。但這是一種相當(dāng)模糊的說(shuō)法。例如用戶輸入“江漢大學(xué)”,可能是他想了解江漢大學(xué)目前的招生狀況,可能需要找到江漢大學(xué)教務(wù)系統(tǒng)的網(wǎng)址,可能需要了解大家對(duì)江漢大學(xué)的評(píng)價(jià)。這是三種相當(dāng)不同的需求。在其他一些情況下,用戶可能關(guān)心的是間接的信息,例如“江漢大學(xué)錄取分?jǐn)?shù)線”,450 分應(yīng)該是他需要的,但不可能包含在這個(gè)短語(yǔ)中。盡管如此,用一個(gè)次或短語(yǔ)來(lái)間接表達(dá)信息需求,希望網(wǎng)頁(yè)中含有該詞或該短語(yǔ)中的詞,依然是主流的搜索引擎查詢模式。這不僅是因?yàn)樗拇_代表了大多數(shù)的情況,還因?yàn)樗容^容易實(shí)現(xiàn)。這樣,一般來(lái)講,系統(tǒng)面對(duì)的是查詢短語(yǔ)。一般地,用 q0 表示用戶提交的原始查詢,例如,q0

37、=“網(wǎng)絡(luò)與分布式系統(tǒng)實(shí)驗(yàn)室”。它首先需要被“切詞”(segment)或稱“分詞”,即把它分成一個(gè)詞的序列。如上例,則為“網(wǎng)絡(luò) 與 分布式 系統(tǒng) 實(shí)驗(yàn)室”(注意,不同的分詞軟件可能得出不同的結(jié)果)。然后需要?jiǎng)h除那些沒(méi)有查詢意義或者幾乎在每篇文檔中都會(huì)出現(xiàn)的詞(例如“的”),在本例中即為“與”。最后形成一個(gè)用于參加匹配的查詢?cè)~表,q = t1, t2, , tm,在本例中就是 q = 網(wǎng)絡(luò),分布式,系統(tǒng),實(shí)驗(yàn)室。倒排文件就是用詞來(lái)作為索引的一個(gè)數(shù)據(jù)結(jié)構(gòu),顯然,q 中的詞必須是包含在倒排文件詞表中才有意義。有了這樣的 q,它的每一個(gè)元素都對(duì)應(yīng)倒排文件中的一個(gè)倒排表(文檔編號(hào)的集合),記作 L(ti)

38、,它們的交集即為對(duì)應(yīng)查詢的結(jié)果文檔集合,從而實(shí)現(xiàn)了查詢和文檔的匹配。上述過(guò)程的基本假設(shè)是:用戶是希望網(wǎng)頁(yè)包含所輸入查詢文字的。 2.4.2 結(jié)果排序就目前的技術(shù)情況看,列表是最常見(jiàn)的形式(但人們也在探求新的形式,如Vivisimo 引擎將結(jié)果頁(yè)面以類別的形式呈現(xiàn))。給定一個(gè)查詢結(jié)果集合,R=r1, r2, , rn,所謂列表,就是按照某種評(píng)價(jià)方式,確定出 R 中元素的一個(gè)順序,讓這些元素以這種順序呈現(xiàn)出來(lái)?;\統(tǒng)地講,ri 和 q 的相關(guān)性(relevance)是形成這種順序的基本因素。但是,有效地定義相關(guān)性本身是很困難的,從原理上講它不僅和查詢?cè)~有關(guān),而且還和用戶的背景,以及用戶的查詢歷史有關(guān)

39、。不同需求的用戶可能輸入同一個(gè)查詢,同一個(gè)用戶在不同的時(shí)間輸入的相同的查詢可能是針對(duì)不同的信息需求。為了形成一個(gè)合適的順序,在搜索引擎出現(xiàn)的早期人們采用了傳統(tǒng)信息檢索領(lǐng)域很成熟 江漢大學(xué)本科畢業(yè)論文(設(shè)計(jì))14的基于詞匯出現(xiàn)頻度的方法。大致上講就是一篇文檔中包含的查詢(q)中的那些詞越多,則該文檔就應(yīng)該排在越前面;再精細(xì)一些的考慮則是若一個(gè)詞在越多的文檔中有出現(xiàn),則該詞用于區(qū)分文檔相關(guān)性的作用就越小。這樣一種思路不僅有一定直覺(jué)上的道理,而且在倒排文件數(shù)據(jù)結(jié)構(gòu)上很容易實(shí)現(xiàn)。因?yàn)椋?dāng)通過(guò)前述關(guān)鍵詞的提取過(guò)程,形成一篇文檔的關(guān)鍵詞集合,p = t1, t2, , tn的時(shí)候,很容易同時(shí)得到每一個(gè)ti

40、 在該文檔中出現(xiàn)的次數(shù),即詞頻,而倒排文件中每個(gè)倒排表的長(zhǎng)度則對(duì)應(yīng)著一個(gè)詞所涉及的文檔的篇數(shù),即文檔頻率。然而,由于網(wǎng)頁(yè)編寫(xiě)的自發(fā)性、隨意性較強(qiáng),僅僅針對(duì)詞的出現(xiàn)來(lái)決定文檔的順序,在 Web 上做信息檢索表現(xiàn)出明顯的缺點(diǎn),需要有其他技術(shù)的補(bǔ)充。這方面最重要的成果就是前面提到過(guò)的 PageRank。通過(guò)在預(yù)處理階段為每篇網(wǎng)頁(yè)形成一個(gè)獨(dú)立于查詢?cè)~(也就和網(wǎng)頁(yè)內(nèi)容無(wú)關(guān))的重要性指標(biāo),將它和查詢過(guò)程中形成的相關(guān)性指標(biāo)結(jié)合形成一個(gè)最終的排序,是目前搜索引擎給出查詢結(jié)果排序的主要方法。 2.4.3 文檔摘要搜索引擎給出的結(jié)果是一個(gè)有序的條目列表,每一個(gè)條目有三個(gè)基本的元素:標(biāo)題,網(wǎng)址和摘要。其中的摘要需要

41、從網(wǎng)頁(yè)正文中生成。一般來(lái)講,從一篇文字中生成一個(gè)恰當(dāng)?shù)恼亲匀徽Z(yǔ)言理解領(lǐng)域的一個(gè)重要課題,人們已經(jīng)做了多年的工作并取得了一些成果。但相關(guān)的技術(shù)用到網(wǎng)絡(luò)搜索引擎來(lái)有兩個(gè)基本困難。一是網(wǎng)頁(yè)的寫(xiě)作通常不規(guī)范,文字比較隨意,因此從語(yǔ)言理解的角度難以做好;二是復(fù)雜的語(yǔ)言理解算法耗時(shí)太多,不適應(yīng)搜索引擎要高效處理海量網(wǎng)頁(yè)信息的需求。據(jù)統(tǒng)計(jì),即使是分詞這一項(xiàng)工作(文本理解的基礎(chǔ)),在高檔微機(jī)上每秒鐘也只能完成 10 篇左右網(wǎng)頁(yè)的處理。因此搜索引擎在生成摘要時(shí)要簡(jiǎn)便許多,基本上可以歸納為兩種方式,一是靜態(tài)方式,即獨(dú)立于查詢,按照某種規(guī)則,事先在預(yù)處理階段從網(wǎng)頁(yè)內(nèi)容提取出一些文字,例如截取網(wǎng)頁(yè)正文的開(kāi)頭 51

42、2 個(gè)字節(jié)(對(duì)應(yīng) 256 個(gè)漢字),或者將每一個(gè)段落的第一個(gè)句子拼起來(lái),等等。這樣形成的摘要存放在查詢子系統(tǒng)中,一旦相關(guān)文檔被選中與查詢項(xiàng)匹配,就讀出返回給用戶。顯然,這種方式對(duì)查詢子系統(tǒng)來(lái)說(shuō)是最輕松的,不需要做另外的處理工作。但這種方式的一個(gè)最大的缺點(diǎn)是摘要和查詢無(wú)關(guān)。一篇網(wǎng)頁(yè)有可能是多個(gè)不同查詢的結(jié)果。當(dāng)用戶輸入某個(gè)查詢,他一般是希望摘要中能夠突出顯示和查詢直接對(duì)應(yīng)的文字,希望摘要中出現(xiàn)和他關(guān)心的文字相關(guān)的句子。因此,有了“動(dòng)態(tài)摘要”方式,即在響應(yīng)查詢的時(shí)候,根據(jù)查詢?cè)~在文檔中的位置,提取出 江漢大學(xué)本科畢業(yè)論文(設(shè)計(jì))15周圍的文字來(lái),在顯示時(shí)將查詢?cè)~標(biāo)亮。這是目前大多數(shù)搜索引擎采用的方

43、式。為了保證查詢的效率,需要在預(yù)處理階段分詞的時(shí)候記住每個(gè)關(guān)鍵詞在文檔中出現(xiàn)的位置。 2.5 小結(jié)本章主要介紹了搜索引擎的相關(guān)理論。以 web 搜索引擎為主要介紹對(duì)象。首先,從 Web 搜索引擎原理和結(jié)構(gòu)介紹,闡述了搜索引擎三段式的工作原理,以及給出了目前主流搜索引擎實(shí)現(xiàn)的整體結(jié)構(gòu)描述。其次分別用三個(gè)章節(jié)分別介紹三段式工作流程中涉及到的各個(gè)流程的主要工作,以及工作中所采用什么樣的工作策略。 江漢大學(xué)本科畢業(yè)論文(設(shè)計(jì))163 Nutch 相關(guān)框架研究3.1 Lucene 研究3.1.1 Lucene 概述Lucene 是一套用于全文檢索和搜尋的開(kāi)放源碼程序庫(kù),由 Apache 軟件基金會(huì)支持和

44、提供的,高效的,基于 Java 的全文檢索庫(kù)。它并不是一個(gè)完整的應(yīng)用程序,而是一組代碼庫(kù),并提供了方便實(shí)現(xiàn)搜索引擎的 API。Lucene 是一個(gè)高效的基于 Java 的全文檢索庫(kù)。所以在了解 Lucene 之前要了解一下全文檢索。 那么什么叫做全文檢索呢? 生活中的數(shù)據(jù)總體分為兩種:結(jié)構(gòu)化數(shù)據(jù)和非結(jié)構(gòu)化數(shù)據(jù)。 3.1.2 Lucene 如何對(duì)索引進(jìn)行搜索 第一步:用戶輸入查詢語(yǔ)句。 查詢語(yǔ)句同我們普通的語(yǔ)言一樣,也是有一定語(yǔ)法的。 不同的查詢語(yǔ)句有不同的語(yǔ)法,如 SQL 語(yǔ)句就有一定的語(yǔ)法。 查詢語(yǔ)句的語(yǔ)法根據(jù)全文搜索引擎的實(shí)現(xiàn)而不同。最基本的有比如:AND, OR, NOT 等。 舉個(gè)例子

45、,用戶輸入語(yǔ)句:lucene AND learned NOT hadoop。 說(shuō)明用戶想找一個(gè)包含 lucene 和 learned 然而不包括 hadoop 的文檔。 第二步:對(duì)查詢語(yǔ)句進(jìn)行詞法分析,語(yǔ)法分析,及語(yǔ)言處理。 由于查詢語(yǔ)句有語(yǔ)法,因而也要進(jìn)行語(yǔ)法分析,語(yǔ)法分析及語(yǔ)言處理。 1. 詞法分析主要用來(lái)識(shí)別單詞和關(guān)鍵字。 如果在詞法分析中發(fā)現(xiàn)不合法的關(guān)鍵字,則會(huì)出現(xiàn)錯(cuò)誤。2. 語(yǔ)法分析主要是根據(jù)查詢語(yǔ)句的語(yǔ)法規(guī)則來(lái)形成一棵語(yǔ) 。 如果發(fā)現(xiàn)查詢語(yǔ)句不滿足語(yǔ)法規(guī)則,則會(huì)報(bào)錯(cuò)。3. 語(yǔ)言處理同索引過(guò)程中的語(yǔ)言處理幾乎相同 。 經(jīng)過(guò)第二步,得到一棵經(jīng)過(guò)語(yǔ)言處理的語(yǔ)法樹(shù)。第三步:搜索索引,得到符

46、合語(yǔ)法樹(shù)的文檔。 第四步:根據(jù)得到的文檔和查詢語(yǔ)句的相關(guān)性,對(duì)結(jié)果進(jìn)行排序。 江漢大學(xué)本科畢業(yè)論文(設(shè)計(jì))173.1.3 Lucene 增刪改索引的 APILucene 可對(duì) email,網(wǎng)頁(yè),文本資料,doc,pdf 之類的文檔進(jìn)行索引建立,在建立索引的時(shí)候可為以后的排序做些處理。表 4-1 給出了通過(guò)內(nèi)存建立文本信息索引的一個(gè)例子。.表 4-1 建立索引public class IndexUtil private String ids = 1, 2, 3, 4, 5, 6;private String emails = , , , , , ;private String contents

47、= wel com to sina aa, how are you ss88817, are you ok 496008642,what are you doing, 496008642, Have a good night, ,good morning ,ss88817;private int attachs = 2, 3, 1, 4, 5, 3;private String names = tom, lily, john, jack, mike, bob;private Directory directory = null;private IndexWriterConfig iwc = n

48、ull;public IndexUtil()try /directory = FSDirectory.open(new File(D:bslucenetestdir01);directory = new RAMDirectory(); catch (Exception e) e.printStackTrace();public void index()IndexWriter writer = null;try iwc = new IndexWriterConfig(Version.LUCENE_36, new StandardAnalyzer(Version.LUCENE_36);writer

49、 = new IndexWriter(directory, iwc);Document doc = null;for(int i=0; iids.length; i+) 江漢大學(xué)本科畢業(yè)論文(設(shè)計(jì))18doc = new Document();doc.add(new Field(id, idsi, Field.Store.YES, Field.Index.NOT_ANALYZED_NO_NORMS);doc.add(new Field(email, emailsi, Field.Store.YES, Field.Index.NOT_ANALYZED);doc.add(new Field(con

50、tent, contentsi, Field.Store.NO, Field.Index.ANALYZED);doc.add(new Field(name, namesi, Field.Store.YES, Field.Index.NOT_ANALYZED_NO_NORMS);writer.addDocument(doc);System.out.println(Index Create OK!); catch (Exception e) e.printStackTrace(); finally try writer.close(); catch (Exception e) e.printSta

51、ckTrace();System.out.println(Index Writer Close Error !);Lucene 查詢服務(wù)是根據(jù)通過(guò)的關(guān)鍵字,從已建立的索引中查詢符合分詞規(guī)則的信息。表 3-2 給出了通過(guò)檢索索引的一個(gè)例子。表 3-2 查詢服務(wù)public void query()IndexReader reader = null;try reader = IndexReader.open(directory); /通過(guò)reader可以獲取有效的文檔數(shù)量/reader.maxSystem.out.println(numDocs: + reader.numDocs();System

52、.out.println(maxDoc: + reader.maxDoc(); catch (Exception e) e.printStackTrace(); finally try reader.close(); catch (IOException e) e.printStackTrace(); 江漢大學(xué)本科畢業(yè)論文(設(shè)計(jì))19System.out.println(Index Reader Close Error !);Lucene 索引更新是根據(jù)提供的新信息,刪除,回復(fù),修改索引的過(guò)程。表 3-3,表 3-4 給出了刪除、恢復(fù)、強(qiáng)制刪除索引的一個(gè)例子。表 3-3 刪除、恢復(fù)、強(qiáng)制刪除索

53、引public void delete()IndexWriter writer = null;try iwc = new IndexWriterConfig(Version.LUCENE_36, new StandardAnalyzer(Version.LUCENE_36);writer = new IndexWriter(directory, iwc);writer.deleteDocuments(new Term(id, 1);System.out.println(Index where id = 1 delete ok!); catch (Exception e) e.printStac

54、kTrace(); finally if(writer != null)try writer.close(); catch (Exception e) e.printStackTrace();System.out.println(Index Writer Close Error );public void unewdelete()IndexReader reader = null;try reader = IndexReader.open(directory, false);reader.undeleteAll(); /恢復(fù)所有索引System.out.println(All Index Un

55、delte Ok!); catch (Exception e) e.printStackTrace(); finally try reader.close(); catch (IOException e) 江漢大學(xué)本科畢業(yè)論文(設(shè)計(jì))20e.printStackTrace();System.out.println(Index Reader Close Error !);public void forceDelete()IndexWriter writer = null;try iwc = new IndexWriterConfig(Version.LUCENE_36, new Standard

56、Analyzer(Version.LUCENE_36);writer = new IndexWriter(directory, iwc);writer.forceMergeDeletes();System.out.println(Index where id = 1 delete ok!); catch (Exception e) e.printStackTrace(); finally if(writer != null)try writer.close(); catch (Exception e) e.printStackTrace();System.out.println(Index W

57、riter Close Error );表 3-4 強(qiáng)制合并索引public void forceMerge()IndexWriter writer = null;try iwc = new IndexWriterConfig(Version.LUCENE_36, new StandardAnalyzer(Version.LUCENE_36);writer = new IndexWriter(directory, iwc);/會(huì)將索引合并為3段,這3段中被刪除的數(shù)據(jù)會(huì)被清空/特別注意:此處Lucene在3.5以后不建議使用,因?yàn)闀?huì)消耗大量的開(kāi)銷,Lucene會(huì)自動(dòng)優(yōu)化writer.forceM

58、erge(3);System.out.println(Index where id = 1 delete ok!); catch (Exception e) e.printStackTrace(); finally 江漢大學(xué)本科畢業(yè)論文(設(shè)計(jì))21if(writer != null)try writer.close(); catch (Exception e) e.printStackTrace();System.out.println(Index Writer Close Error );3.2 Nutch 研究3.2.1 Nutch 概述Apache Nutch 是一個(gè)用 Java 編寫(xiě)的

59、開(kāi)源網(wǎng)絡(luò)爬蟲(chóng)。通過(guò)它,就能夠自動(dòng)地找到網(wǎng)頁(yè)中的超鏈接,從而極大地減輕了維護(hù)工作的負(fù)擔(dān),例如檢查那些已經(jīng)斷開(kāi)了的鏈接,或是對(duì)所有已經(jīng)訪問(wèn)過(guò)的網(wǎng)頁(yè)創(chuàng)建一個(gè)副本以便用于搜索。接下來(lái)就是 Apache Solr所要做的。Solr 是一個(gè)開(kāi)源的全文搜索框架,通過(guò) Solr 能夠搜索 Nutch 已經(jīng)訪問(wèn)過(guò)的網(wǎng)頁(yè)。Apache Nutch 對(duì)于 Solr 已經(jīng)支持得很好,這大大簡(jiǎn)化了 Nutch 與 Solr 的整合。這也消除了過(guò)去依賴于 Apache Tomcat 來(lái)運(yùn)行老的 Nutch 網(wǎng)絡(luò)應(yīng)用以及依賴于 Apache Lucene 來(lái)進(jìn)行索引的麻煩。3.2.2 研究 Nutch 的原因可能有的朋友會(huì)有疑問(wèn),已經(jīng)有 google,有百度,為何還需要建立自己的搜索引擎呢?這里我列出 3 點(diǎn)原因: (1) 透明度:nutch 是開(kāi)放源代碼的,因此任何人都可以查看他的排序算法是如何工作的。商業(yè)的搜索引擎排序算法都是保密的,無(wú)法知道為什么搜索出來(lái)的排序結(jié)果是如何算出來(lái)的。更進(jìn)一步,一些搜索引擎允許競(jìng)價(jià)排名,比如百度,這樣的索引結(jié)果并不是和站點(diǎn)內(nèi)容相關(guān)的。因此 nutch 對(duì)學(xué)術(shù)搜索和政府類站點(diǎn)的搜索來(lái)說(shuō),是個(gè)好選擇,因?yàn)橐粋€(gè)公平的排序結(jié)果是非常重要的。(2) 對(duì)搜索引擎的理解:我們并沒(méi)有 google 的源代碼,因此學(xué)習(xí)搜索引擎 Nutch是個(gè)不錯(cuò)的選擇。了解一個(gè)大型分布式的搜索引擎如何工

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論