網絡中的資源非常豐富_第1頁
網絡中的資源非常豐富_第2頁
網絡中的資源非常豐富_第3頁
網絡中的資源非常豐富_第4頁
網絡中的資源非常豐富_第5頁
已閱讀5頁,還剩23頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、目錄目錄目錄目錄.1摘要摘要.3第一章第一章 引言引言.4第二章第二章 搜索引擎的結構搜索引擎的結構.52.1 系統概述.52.2 搜索引擎的構成.5網絡機器人.5索引與搜索.5 Web 服務器.62.3 搜索引擎的主要指標及分析.62.4 小節.6第三章第三章 網絡機器人網絡機器人.73.1 什么是網絡機器人.73.2 網絡機器人的結構分析.7如何解析 HTML.7程序結構.8如何構造 Spider 程序.9如何提高程序性能.11網絡機器人的代碼分析.123.3 小節.14第四章第四章 基于基于 LUCENE 的索引與搜索的索引與搜索.154.1 什么是 LUCENE全文檢索 .154.2

2、LUCENE的原理分析.15全文檢索的實現機制.15Lucene 的索引效率.15中文切分詞機制.174.3 LUCENE與 SPIDER的結合 .184.4 小節.21第五章第五章 基于基于 TOMCAT 的的 WEB 服務器服務器.225.1 什么是基于 TOMCAT的 WEB服務器.225.2 用戶接口設計.22客戶端設計.22服務端設計.235.3 在 TOMCAT上部署項目.255.4 小節.25第六章第六章 搜索引擎策略搜索引擎策略.266.1 簡介.266.2 面向主題的搜索策略.26導向詞.26權威網頁和中心網頁.276.3 小節.27參考文獻參考文獻.28摘要摘要網絡中的資源

3、非常豐富,但是如何有效的搜索信息卻是一件困難的事情。建立搜索引擎就是解決這個問題的最好方法。本文首先詳細介紹了基于英特網的搜索引擎的系統結構,然后從網絡機器人、索引引擎、Web 服務器三個方面進行詳細的說明。為了更加深刻的理解這種技術,本人還親自實現了一個自己的搜索引擎新聞搜索引擎。新聞搜索引擎是從指定的 Web 頁面中按照超連接進行解析、搜索,并把搜索到的每條新聞進行索引后加入數據庫。然后通過 Web 服務器接受客戶端請求后從索引數據庫中搜索出所匹配的新聞。本人在介紹搜索引擎的章節中除了詳細的闡述技術核心外還結合了新聞搜索引擎的實現代碼來說明,圖文并茂、易于理解。AbstractThe re

4、sources in the internet are abundant, but it is a difficult job to search some useful information. So a search engine is the best method to solve this problem. This article fist introduces the system structure of search engine based on the internet in detail, then gives a minute explanation form Spi

5、der search, engine and web server. In order to understand the technology more deeply, I have programmed a news search engine by myself.The news search engine is explained and searched according to hyperlink from a appointed web page, then indexs every searched information and adds it to the index da

6、tabase. Then after receiving the customers requests from the web server, it soon searchs the right news form the index engine,In the chapter of introducing search engine, it is not only elaborate the core technology, but also combine with the modern code,pictures included, easy to understand.第一章第一章

7、引言引言面對浩瀚的網絡資源,搜索引擎為所有網上沖浪的用戶提供了一個入口,毫不夸張的說,所有的用戶都可以從搜索出發到達自己想去的網上任何一個地方。因此它也成為除了電子郵件以外最多人使用的網上服務。搜索引擎技術伴隨著 WWW 的發展是引人注目的。搜索引擎大約經歷了三代的更新發展:第一代搜索引擎出現于 1994 年。這類搜索引擎一般都索引少于 1,000,000 個網頁,極少重新搜集網頁并去刷新索引。而且其檢索速度非常慢,一般都要等待 10 秒甚至更長的時間。在實現技術上也基本沿用較為成熟的 IR(Information Retrieval) 、網絡、數據庫等技術,相當于利用一些已有技術實現的一個

8、WWW 上的應用。在 1994 年 3 月到 4 月,網絡爬蟲 World Web Worm (WWWW)平均每天承受大約 1500 次查詢。大約在 1996 年出現的第二代搜索引擎系統大多采用分布式方案(多個微型計算機協同工作)來提高數據規模、響應速度和用戶數量,它們一般都保持一個大約 50,000,000 網頁的索引數據庫,每天能夠響應 10,000,000 次用戶檢索請求。1997 年 11 月,當時最先進的幾個搜索引擎號稱能建立從 2,000,000 到 100,000,000 的網頁索引。Altavista 搜索引擎聲稱他們每天大概要承受 20,000,000 次查詢。2000 年搜

9、索引擎 2000 年大會上,按照 Google 公司總裁 Larry Page 的演講,Google 正在用 3,000 臺運行 Linux 系統的個人電腦在搜集 Web 上的網頁,而且以每天 30 臺的速度向這個微機集群里添加電腦,以保持與網絡的發展相同步。每臺微機運行多個爬蟲程序搜集網頁的峰值速度是每秒 100 個網頁,平均速度是每秒 48.5 個網頁,一天可以搜集超過4,000,000 網頁搜索引擎一詞在國內外因特網領域被廣泛使用,然而他的含義卻不盡相同。在美國搜索引擎通常指的是基于因特網的搜索引擎,他們通過網絡機器人程序收集上千萬到幾億個網頁,并且每一個詞都被搜索引擎索引,也就是我們說

10、的全文檢索。著名的因特網搜索引擎包括 First Search、Google、HotBot 等。在中國,搜索引擎通常指基于網站目錄的搜索服務或是特定網站的搜索服務,本人這里研究的是基于因特網的搜索技術。第二章第二章 搜索引擎的結構搜索引擎的結構2.12.1 系統概述系統概述 搜索引擎是根據用戶的查詢請求,按照一定算法從索引數據中查找信息返回給用戶。為了保證用戶查找信息的精度和新鮮度,搜索引擎需要建立并維護一個龐大的索引數據庫。一般的搜索引擎由網絡機器人程序、索引與搜索程序、索引數據庫等部分組成。系統結構圖2.22.2 搜索引擎的構成搜索引擎的構成 網絡機器人也稱為“網絡蜘蛛”(Spider),

11、是一個功能很強的 WEB 掃描程序。它可以在掃描 WEB 頁面的同時檢索其內的超鏈接并加入掃描隊列等待以后掃描。因為 WEB 中廣泛使用超鏈接,所以一個 Spider 程序理論上可以訪問整個 WEB 頁面。 為了保證網絡機器人遍歷信息的廣度和深度需要設定一些重要的鏈接并制定相關的掃描策略。 網絡機器人將遍歷得到的頁面存放在臨時數據庫中,如果通過 SQL 直接查詢信息速度將會難以忍受。為了提高檢索效率,需要建立索引,按照倒排文件的格式存放。如果索引不及時跟新的話,用戶用搜索引擎也不能檢索到。 用戶輸入搜索條件后搜索程序將通過索引數據庫進行檢索然后把符合查詢要求的數據WWW文檔網絡機器人程序建立

12、Lucene 索引從數據庫中搜索信息Tomcat 服務器Lucene 索引數據庫WWW 瀏覽器WWW 瀏覽器JSP網絡機器人程序庫按照一定的策略進行分級排列并且返回給用戶。 Web 服務器服務器 客戶一般通過瀏覽器進行查詢,這就需要系統提供 Web 服務器并且與索引數據庫進行連接。客戶在瀏覽器中輸入查詢條件,Web 服務器接收到客戶的查詢條件后在索引數據庫中進行查詢、排列然后返回給客戶端。2.32.3 搜索引擎的主要指標及分析搜索引擎的主要指標及分析 搜索引擎的主要指標有響應時間、召回率、準確率、相關度等。這些指標決定了搜索引擎的技術指標。搜索引擎的技術指標決定了搜索引擎的評價指標。好的搜索引

13、擎應該是具有較快的反應速度和高召回率、準確率的,當然這些都需要搜索引擎技術指標來保障。召回率召回率:一次搜索結果中符合用戶要求的數目與用戶查詢相關信息的總數之比準確率準確率:一次搜索結果中符合用戶要求的數目與該次搜索結果總數之比相關度相關度:用戶查詢與搜索結果之間相似度的一種度量精確度精確度:對搜索結果的排序分級能力和對垃圾網頁的抗干擾能力2.42.4 小節小節 以上對基于因特網的搜索引擎結構和性能指標進行了分析,本人在這些研究的基礎上利用 JavaTM 技術和一些 Open Source 工具實現了一個簡單的搜索引擎新聞搜索引擎。在接下來的幾章里將會就本人的設計進行詳細的分析。第三章第三章

14、網絡機器人網絡機器人3.13.1 什么是網絡機器人什么是網絡機器人網絡機器人又稱為 Spider 程序,是一種專業的 Bot 程序。用于查找大量的 Web 頁面。它從一個簡單的 Web 頁面上開始執行,然后通過其超鏈接在訪問其他頁面,如此反復理論上可以掃描互聯網上的所有頁面。基于因特網的搜索引擎是 Spider 的最早應用。例如搜索巨頭 Google 公司,就利用網絡機器人程序來遍歷 Web 站點,以創建并維護這些大型數據庫。網絡機器人還可以通過掃描 Web 站點的主頁來得到這個站點的文件清單和層次機構。還可以掃描出中斷的超鏈接和拼寫錯誤等。3.23.2 網絡機器人的結構分析網絡機器人的結構分

15、析 Internet 是建立在很多相關協議基礎上的,而更復雜的協議又建立在系統層協議之上。Web 就是建立在 HTTP ( Hypertext Transfer Protocol ) 協議基礎上,而 HTTP 又是建立在TCP/IP ( Transmission Control Protocol / Internet Protocol ) 協議之上,它同時也是一種Socket 協議。所以網絡機器人本質上是一種基于 Socket 的網絡程序。HTML因為 Web 中的信息都是建立在 HTML 協議之上的,所以網絡機器人在檢索網頁時的第一個問題就是如何解析 HTML。在解決如何解析之前,先來介紹下

16、 HTML 中的幾種數據。文本:文本:除了腳本和標簽之外的所有數據注釋:注釋:程序員留下的說明文字,對用戶是不可見的簡單標簽:簡單標簽:由單個表示的 HTML 標簽開始標簽和結束標簽:開始標簽和結束標簽:用來控制所包含的 HTML 代碼我們在進行解析的時候不用關心所有的標簽,只需要對其中幾種重要的進行解析即可。超連接標簽超連接標簽超連接定義了 WWW 通過 Internet 鏈接文檔的功能。他們的主要目的是使用戶能夠任意遷移到新的頁面,這正是網絡機器人最關心的標簽。圖像映射標簽圖像映射標簽圖像映射是另一種非常重要的標簽。它可以讓用戶通過點擊圖片來遷移到新的頁面中。表單標簽表單標簽表單是 Web

17、 頁面中可以輸入數據的單元。許多站點讓用戶填寫數據然后通過點擊按鈕來提交內容,這就是表單的典型應用。表格標簽表格標簽表格是 HTML 的構成部分,通常用來格式化存放、顯示數據。我們在具體解析這些 HTMl 標簽有兩種方法:通過 JavaTM 中的 Swing 類來解析或者通過 Bot 包中的 HTMLPage 類來解析,本人在實際編程中采用后者。Bot 包中的 HTMLPage 類用來從指定 URL 中讀取數據并檢索出有用的信息。下面給出該類幾種重要的方法。HTMLPage 構造函數構造函數 構造對象并指定用于通訊的 HTTP 對象Public HTMLPage(HTTP http)GetFo

18、rms 方法方法 獲取最后一次調用 Open 方法檢索到的表單清單Public Vector getForms()GetHTTP 方法方法 獲取發送給構造函數的 HTTP 對象Public HTTP getHTTP()GetImage 方法方法 獲取指定頁面的圖片清單Public Vector getImage()GetLinks 方法方法 獲取指定頁面的連接清單Public Vector getLinks()Open 方法方法 打開一個頁面并讀入該頁面,若指定了回調對象則給出所有該對象數據Public void open(String url,HTMLEditorKit.ParserCall

19、back a)SpiderSpider 程序結構程序結構網絡機器人必須從一個網頁遷移到另一個網頁,所以必須找到該頁面上的超連接。程序首先解析網頁的 HTML 代碼,查找該頁面內的超連接然后通過遞歸和非遞歸兩種結構來實現 Spider 程序。遞歸結構遞歸結構遞歸是在一個方法中調用自己本身的程序設計技術。雖然比較容易實現但耗費內存且不能使用多線程技術,故不適合大型項目。非遞歸結構非遞歸結構這種方法使用隊列的數據結構,當 Spider 程序發現超連接后并不調用自己本身而是把超連接加入到等待隊列中。當 Spider 程序掃描完當前頁面后會根據制定的策略訪問隊列中的下一個超連接地址。雖然這里只描述了一個

20、隊列,但在實際編程中用到了四個隊列,他們每個隊列都保存著同一處理狀態的 URL。等待隊列等待隊列 在這個隊列中,URL 等待被 Spider 程序處理。新發現的 URL 也被加入到這個隊列中處理隊列處理隊列 當 Spider 程序開始處理時,他們被送到這個隊列中錯誤隊列錯誤隊列 如果在解析網頁時出錯,URL 將被送到這里。該隊列中的 URL 不能被移入其他隊列中完成隊列完成隊列 如果解析網頁沒有出錯,URL 將被送到這里。該隊列中的 URL 不能被移入其它隊列中在同一時間 URL 只能在一個隊列中,我們把它稱為 URL 的狀態。發現 URL等待隊列運行隊列完成隊列錯誤隊列完成 URL以上的圖表

21、示了隊列的變化過程,在這個過程中,當一個 URL 被加入到等待隊列中時Spider 程序就會開始運行。只要等待隊列中有一個網頁或 Spider 程序正在處理一個網頁,程序就會繼續他的工作。當等待隊列為空并且當前沒有任何網頁時,Spider 程序就會停止它的工作。在構造 Spider 程序之前我們先了解下程序的各個部分是如何共同工作的。以及如何對這個程序進行擴展。流程圖如下所示:把 URL 加入等待隊列Spider 程序工作完成等待隊列中是否有 URL?否下載從等待隊列中得到的網頁,并將他送入運行隊列中。是這個網頁包含其他超級連接嗎?將這一網頁送入完成隊列并繼續查看網頁上的下一個超連接是否為指向

22、Web 的連接?報告其他類型連接連接是否與網頁所在主機不同且只處理本地連接?報告外部連接報告網頁連接將連接加入等候隊列否是否是否是IspiderReportable 接口接口這是一個必須實現的接口,可以通過回調函數接受 Spider 所遇到的頁面。接口定義了Spider 向他的控制者發送的幾個事件。通過提供對每個事件的處理程序,可以創建各種Spider 程序。下面是他的接口聲明:public interface IspiderReportablepublic boolean foundInternalLink(String url);public boolean foundExternalLi

23、nk(String url);public boolean foundOtherLink(String url);public void processPage(HTTP page);public void completePage(HTTP page,boolean error);public boolean getRemoveQuery();public void SpiderComplete();.4 如何提高程序性能如何提高程序性能Internet 中擁有海量的 Web 頁面,如果開發出高效的 Spider 程序是非常重要的。下面就來介紹下幾種提高性能的技術:Java

24、的多線程技術的多線程技術線程是通過程序的一條執行路線。多線程是一個程序同時運行多個任務的能力。它是在一個程序的內部進行分工合作。優化程序的通常方法是確定瓶頸并改進他。瓶頸是一個程序中最慢的部分,他限制了其他任務的運行。據個例子說明:一個 Spider 程序需要下載十個頁面,要完成這一任務,程序必須向服務器發出請求然后接受這些網頁。當程序等待響應的時候其他任務不能執行,這就影響了程序的效率。如果用多線程技術可以讓這些網頁的等待時間合在一起,不用互相影響,這就可以極大的改進程序性能。數據庫技術數據庫技術當 Spider 程序訪問一個大型 Web 站點時,必須使用一種有效的方法來存儲站點隊列。這些隊

25、列管理 Spider 程序必須維護大型網頁的列表。如果把他們放在內存中將會是性能下降,所以我們可以把他們放在數據庫中減少系統資源的消耗。代碼分析代碼分析程序結構圖如下: 程序代碼實現如下:package news;/* * 新聞搜索引擎* 計算機 99630 沈晨 * 版本 1.0 */import com.heaton.bot.HTTP;import com.heaton.bot.HTTPSocket;import com.heaton.bot.ISpiderReportable;import com.heaton.bot.IWorkloadStorable;import com.heato

26、n.bot.Spider;import com.heaton.bot.SpiderInternalWorkload;/* * 構造一個 Bot 程序 */public class Searcher implements ISpiderReportable public static void main(String args) throws Exception IWorkloadStorable wl = new SpiderInternalWorkload(); Searcher _searcher = new Searcher(); Spider _spider = new Spider(

27、_searcher, /news.htm, new HTTPSocket(), 100, wl); _spider.setMaxBody(100); _spider.start(); / 發現內部連接時調用,url 表示程序發現的 URL,若返回 true 則加入作業中,否則不加入。 public boolean foundInternalLink(String url) return false; / 發現外部連接時調用,url 表示程序所發現的 URL,若返回 true 則把加入作業中,否則不加入。 public boolean foundExternalLi

28、nk(String url) return false; / 當發現其他連接時調用這個方法。其他連接指的是非 HTML 網頁,可能是 E-mail 或者 FTP public boolean foundOtherLink(String url) return false; / 用于處理網頁,這是 Spider 程序要完成的實際工作。 public void processPage(HTTP http) System.out.println(掃描網頁: + http.getURL(); new HTMLParse(http).start(); / 用來請求一個被處理的網頁。 public voi

29、d completePage(HTTP http, boolean error) / 由 Spider 程序調用以確定查詢字符串是否應刪除。如果隊列中的字符串應當刪除,方法返回真。 public boolean getRemoveQuery() return true; / 當 Spider 程序沒有剩余的工作時調用這個方法。 public void spiderComplete() 3.33.3 小節小節在本章中,首先介紹了網絡機器人的基本概念,然后具體分析了 Spider 程序的結構和功能。在最后還結合具體代碼進行了詳細說明。本人在編程中運用了 JavaTM 技術,主要涉及到了 net 和

30、 io 兩個包。此外還用了第三方開發包 Bot(由 Jeff Heaton 提供的開發包) 。第四章第四章 基于基于 lucene 的索引與搜索的索引與搜索4.14.1 什么是什么是 Lucene 全文檢索全文檢索Lucene 是 Jakarta Apache 的開源項目。它是一個用 Java 寫的全文索引引擎工具包,可以方便的嵌入到各種應用中實現針對應用的全文索引/檢索功能。4.24.2 Lucene 的原理分析的原理分析全文檢索的實現機制全文檢索的實現機制Lucene 的 API 接口設計的比較通用,輸入輸出結構都很像數據庫的表=記錄=字段,所以很多傳統的應用的文件、數據庫等都可以比較方便

31、的映射到 Lucene 的存儲結構和接口中。總體上看:可以先把 Lucene 當成一個支持全文索引的數據庫系統。索引數據源:doc(field1,field2.) doc(field1,field2.) indexer / _ | Lucene Index| - / searcher 結果輸出:Hits(doc(field1,field2) doc(field1.)Document:一個需要進行索引的“單元”,一個 Document 由多個字段組成Field:字段Hits:查詢結果集,由匹配的 Document 組成 Lucene 的索引效率的索引效率通常書籍后面常常附關鍵詞索引表(比如:北京

32、:12, 34 頁,上海:3,77 頁),它能夠幫助讀者比較快地找到相關內容的頁碼。而數據庫索引能夠大大提高查詢的速度原理也是一樣,想像一下通過書后面的索引查找的速度要比一頁一頁地翻內容高多少倍而索引之所以效率高,另外一個原因是它是排好序的。對于檢索系統來說核心是一個排序問題。由于數據庫索引不是為全文索引設計的,因此,使用 like %keyword%時,數據庫索引是不起作用的,在使用 like 查詢時,搜索過程又變成類似于一頁頁翻書的遍歷過程了,所以對于含有模糊查詢的數據庫服務來說,LIKE 對性能的危害是極大的。如果是需要對多個關鍵詞進行模糊匹配:like%keyword1% and li

33、ke %keyword2% .其效率也就可想而知了。所以建立一個高效檢索系統的關鍵是建立一個類似于科技索引一樣的反向索引機制,將數據源(比如多篇文章)排序順序存儲的同時,有另外一個排好序的關鍵詞列表,用于存儲關鍵詞=文章映射關系,利用這樣的映射關系索引:關鍵詞=出現關鍵詞的文章編號,出現次數(甚至包括位置:起始偏移量,結束偏移量),出現頻率,檢索過程就是把模糊查詢變成多個可以利用索引的精確查詢的邏輯組合的過程。從而大大提高了多關鍵詞查詢的效率,所以,全文檢索問題歸結到最后是一個排序問題。由此可以看出模糊查詢相對數據庫的精確查詢是一個非常不確定的問題,這也是大部分數據庫對全文檢索支持有限的原因。

34、Lucene 最核心的特征是通過特殊的索引結構實現了傳統數據庫不擅長的全文索引機制,并提供了擴展接口,以方便針對不同應用的定制。可以通過一下表格對比一下數據庫的模糊查詢:Lucene 全文索引引擎數據庫索引將數據源中的數據都通過全文索引一一建立反向索引對于 LIKE 查詢來說,數據傳統的索引是根本用不上的。數據需要逐個便利記錄進行 GREP式的模糊匹配,比有索引的搜索速度要有多個數量級的下降。匹配效果通過詞元(term)進行匹配,通過語言分析接口的實現,可以實現對中文等非英語的支持。使用:like %net% 會把 netherlands也匹配出來,多個關鍵詞的模糊匹配:使用 like %co

35、m%net%:就不能匹配詞序顛倒的匹配度有匹配度算法,將匹配程度(相似度)比較高的結果排在前面。沒有匹配程度的控制:比如有記錄中 net 出現5 詞和出現 1 次的,結果是一樣的。結果輸出通過特別的算法,將最匹配度最高的頭返回所有的結果集,在匹配條目非常多的時候100 條結果輸出,結果集是緩沖式的小批量讀取的。(比如上萬條)需要大量的內存存放這些臨時結果集。可定制性通過不同的語言分析接口實現,可以方便的定制出符合應用需要的索引規則(包括對中文的支持)沒有接口或接口復雜,無法定制結論高負載的模糊查詢應用,需要負責的模糊查詢的規則,索引的資料量比較大使用率低,模糊匹配規則簡單或者需要模糊查詢的資料

36、量少 中文切分詞機制中文切分詞機制對于中文來說,全文索引首先還要解決一個語言分析的問題,對于英文來說,語句中單詞之間是天然通過空格分開的,但亞洲語言的中日韓文語句中的字是一個字挨一個,所有,首先要把語句中按“詞”進行索引的話,這個詞如何切分出來就是一個很大的問題。首先,肯定不能用單個字符作(si-gram)為索引單元,否則查“上海”時,不能讓含有“海上”也匹配。但一句話:“北京天安門”,計算機如何按照中文的語言習慣進行切分呢?“北京 天安門” 還是“北 京 天安門”?讓計算機能夠按照語言習慣進行切分,往往需要機器有一個比較豐富的詞庫才能夠比較準確的識別出語句中的單詞。另外一個解決的辦法是采用自

37、動切分算法:將單詞按照 2 元語法(bigram)方式切分出來,比如:北京天安門 = 北京 京天 天安 安門。這樣,在查詢的時候,無論是查詢北京 還是查詢天安門,將查詢詞組按同樣的規則進行切分:北京,天安安門,多個關鍵詞之間按與and的關系組合,同樣能夠正確地映射到相應的索引中。這種方式對于其他亞洲語言:韓文,日文都是通用的。基于自動切分的最大優點是沒有詞表維護成本,實現簡單,缺點是索引效率低,但對于中小型應用來說,基于 2 元語法的切分還是夠用的。基于 2 元切分后的索引一般大小和源文件差不多,而對于英文,索引文件一般只有原文件的 30%-40%不同,自動切分自動切分詞表切分詞表切分實現實現

38、非常簡單實現復雜查詢增加了查詢分析的復雜程度,適于實現比較復雜的查詢語法規則存儲效率索引冗余大,索引幾乎和原文一樣大索引效率高,為原文大小的 30左右維護成本無詞表維護成本詞表維護成本非常高:中日韓等語言需要分別維護。還需要包括詞頻統計等內容適用領域嵌入式系統:運行環境資源有限分布式系統:無詞表同步問題多語言環境:無詞表維護成本對查詢和存儲效率要求高的專業搜索引擎4.34.3 Lucene 與與 Spider 的結合的結合首先構造一個 Index 類用來實現對內容進行索引。代碼分析如下:package news;/* * 新聞搜索引擎* 計算機 99630 沈晨 * 版本 1.0 */impo

39、rt java.io.IOException;import .ChineseAnalyzer;import org.apache.lucene.document.Document;import org.apache.lucene.document.Field;import org.apache.lucene.index.IndexWriter;public class Index IndexWriter _writer = null; Index() throws Exception _writer = new IndexWriter(c:Newsindex, new ChineseAnaly

40、zer(), true); /* * 把每條新聞加入索引中 * param url 新聞的 url * param title 新聞的標題 * throws java.lang.Exception */ void AddNews(String url, String title) throws Exception Document _doc = new Document(); _doc.add(Field.Text(title, title); _doc.add(Field.UnIndexed(url, url); _writer.addDocument(_doc); /* * 優化并且清理資

41、源 * throws java.lang.Exception */ void close() throws Exception _writer.optimize(); _writer.close(); 然后構造一個 HTML 解析類,把通過 bot 程序收集的新聞內容進行索引。代碼分析如下:package news;/* * 新聞搜索引擎* 計算機 99630 沈晨 * 版本 1.0 */import java.util.Iterator;import java.util.Vector;import com.heaton.bot.HTMLPage;import com.heaton.bot.H

42、TTP;import com.heaton.bot.Link;public class HTMLParse HTTP _http = null; public HTMLParse(HTTP http) _http = http; /* * 對 Web 頁面進行解析后建立索引 */ public void start() try HTMLPage _page = new HTMLPage(_http); _page.open(_http.getURL(), null); Vector _links = _page.getLinks(); Index _index = new Index(); I

43、terator _it = _links.iterator(); int n = 0; while (_it.hasNext() Link _link = (Link) _it.next(); String _herf = input(_link.getHREF().trim(); String _title = input(_link.getPrompt().trim(); _index.AddNews(_herf, _title); n+; System.out.println(共掃描到 + n + 條新聞); _index.close(); catch (Exception ex) Sy

44、stem.out.println(ex); /* * 解決 java 中的中文問題 * param str 輸入的中文 * return 經過解碼的中文 */ public static String input(String str) String temp = null; if (str != null) try temp = new String(str.getBytes(ISO8859_1); catch (Exception e) return temp; 4.44.4 小節小節在進行海量數據搜索時,如果使用單純的數據庫技術,那將是非常痛苦的。速度將是極大的瓶頸。所以本章提出了使用全

45、文搜索引擎 Lucene 進行索引、搜索。最后,還結合了具體代碼說明了如何把 Lucene 全文搜索引擎和 Spider 程序互相集合來實現新聞搜索的功能。第五章第五章 基于基于 Tomcat 的的 Web 服務器服務器5.15.1 什么是基于什么是基于 Tomcat 的的 Web 服務器服務器Web 服務器是在網絡中為實現信息發布、資料查詢、數據處理等諸多應用搭建基本平臺的服務器。Web 服務器如何工作:在 Web 頁面處理中大致可分為三個步驟,第一步,Web 瀏覽器向一個特定的服務器發出 Web 頁面請求;第二步,Web 服務器接收到 Web 頁面請求后,尋找所請求的 Web 頁面,并將所

46、請求的 Web 頁面傳送給 Web 瀏覽器;第三步,Web 服務器接收到所請求的 Web 頁面,并將它顯示出來。Tomcat 是一個開放源代碼、運行 servlet 和 JSP Web 應用軟件的基于 Java 的 Web 應用軟件容器。Tomcat 由 Apache-Jakarta 子項目支持并由來自開放性源代碼 Java 社區的志愿者進行維護。Tomcat Server 是根據 servlet 和 JSP 規范進行執行的,因此我們就可以說Tomcat Server 也實行了 Apache-Jakarta 規范且比絕大多數商業應用軟件服務器要好。5.25.2 用戶接口設計用戶接口設計一個良好

47、的查詢界面非常重要,例如 Googl 就以她簡潔的查詢界面而聞名。我在設計的時候也充分考慮了實用性和簡潔性。查詢界面截圖如下: 搜索結果截圖如下:主要利用 JavaTM Servlet 技術實現,用戶通過 GET 方法從客戶端向服務端提交查詢條件,服務端通過 Tomcat 的 Servlet 容器接受并分析提交參數,再調用 lucene 的開發包進行搜索操作。最后把搜索的結果以 HTTP 消息包的形式發送至客戶端,從而完成一次搜索操作。服務端 Servlet 程序的結構如下:實現的關鍵代碼如下:public void Search(String qc, PrintWriter out) thr

48、ows Exception / 從索引目錄創建索引 IndexSearcher _searcher = new IndexSearcher(c:newsindex); / 創建標準分析器 Analyzer analyzer = new ChineseAnalyzer(); / 查詢條件 String line = qc; / Query 是一個抽象類 Query query = QueryParser.parse(line, title, analyzer); out.println(); out.println(搜索結果); out.println(); out.println( + + 新

49、聞搜索引擎: + + + ); out.println(搜索關鍵字: + query.toString(title) + ); Hits hits = _searcher.search(query); out.println( 總共找到 + hits.length() + 條新聞); final int HITS_PER_PAGE = 10; for (int start = 0; start hits.length(); start += HITS_PER_PAGE) int end = Math.min(hits.length(), start + HITS_PER_PAGE); for

50、(int i = start; i end; i+) Document doc = hits.doc(i); String url = doc.get(url); if (url != null) out.println( (i + 1) + + replace(doc.get(title), qc) + ); else System.out.println(沒有找到!); out.println(); _searcher.close(); ;5.35.3 在在 Tomcat 上部署項目上部署項目Tomcat 中的應用程序是一個 WAR(Web Archive)文件。WAR 是 Sun 提出的

51、一種Web 應用程序格式,與 JAR 類似,也是許多文件的一個壓縮包。這個包中的文件按一定目錄結構來組織:通常其根目錄下包含有 Html 和 Jsp 文件或者包含這兩種文件的目錄,另外還會有一個 WEB-INF 目錄,這個目錄很重要。通常在 WEB-INF 目錄下有一個 web.xml 文件和一個 classes 目錄,web.xml 是這個應用的配置文件,而 classes 目錄下則包含編譯好的Servlet 類和 Jsp 或 Servlet 所依賴的其它類(如 JavaBean) 。通常這些所依賴的類也可以打包成 JAR 放到 WEB-INF 下的 lib 目錄下,當然也可以放到系統的 C

52、LASSPATH 中。在 Tomcat 中,應用程序的部署很簡單,你只需將你的 WAR 放到 Tomcat 的 webapp 目錄下,Tomcat 會自動檢測到這個文件,并將其解壓。你在瀏覽器中訪問這個應用的 Jsp 時,通常第一次會很慢,因為 Tomcat 要將 Jsp 轉化為 Servlet 文件,然后編譯。編譯以后,訪問將會很快。5.45.4 小節小節本章中詳細介紹了如何構架基于 Tomcat 的 Web 服務器,使得用戶通過瀏覽器進行新聞的搜索,最后還對 Tomcat 如何部署進行了說明。第六章第六章 搜索引擎策略搜索引擎策略6.16.1 簡介簡介隨著信息多元化的增長,千篇一律的給所有用戶同一個入口顯然已經不能滿足特定用戶更深入的查詢需求。同時,這樣的通用搜索引擎在目前的硬件條件下,要及時更新以得到互聯網上較全面的信息是不太可能的。針對這種情況,我們需要一個分類細致精確、數據全面深入、更新及時的面向主題的搜索引擎。由于主題搜索運用了人工分類以及特征提取等智能化策略,因此它比上面提到的前三代的搜索引擎將更加有效和準確,我們將這類完善的主題搜索引擎稱為第四代搜索引擎。6.26.2 面向主題的搜索策略

溫馨提示

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

評論

0/150

提交評論