版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 目 錄</b></p><p><b> 摘要1</b></p><p> Abstract2</p><p><b> 第1章 引言3</b></p><p> 1.1 課題背景3</p><p>
2、1.2 國內(nèi)外研究現(xiàn)狀3</p><p> 1.3 課題的目的和意義4</p><p> 1.4 本章小結(jié)4</p><p> 第2章 相關(guān)技術(shù)及開發(fā)工具介紹5</p><p> 2.1 J2EE簡介5</p><p> 2.2 Lucene6</p><p>
3、 2.3 開發(fā)環(huán)境及工具7</p><p> 第3章 系統(tǒng)總體設(shè)計8</p><p> 3.1 總體設(shè)計框架8</p><p> 3.2 系統(tǒng)基本功能8</p><p> 3.3 數(shù)據(jù)庫設(shè)計11</p><p> 3.4 本章小結(jié)13</p><p> 第4
4、章 部分系統(tǒng)模塊詳細(xì)設(shè)計與實現(xiàn)14</p><p> 4.1 郵箱管理模塊14</p><p> 4.2 用戶管理模塊18</p><p> 4.3 JMS應(yīng)用19</p><p> 4.4 本章小結(jié)22</p><p> 第5章 郵件檢索模塊詳細(xì)設(shè)計與實現(xiàn)23</p>
5、<p> 5.1 郵件的索引23</p><p> 5.2 郵件的搜索27</p><p> 5.3 搜索結(jié)果的高亮顯示30</p><p> 5.4 本章小結(jié)31</p><p> 第6章 總結(jié)與展望32</p><p> 6.1 系統(tǒng)總結(jié)32</p>&l
6、t;p> 6.2 系統(tǒng)實現(xiàn)部分效果圖32</p><p> 6.3 發(fā)展前景34</p><p><b> 謝辭35</b></p><p><b> 參考文獻(xiàn)36</b></p><p><b> 附 錄37</b></p><
7、;p> 支持全文檢索的郵件代理服務(wù)平臺—多郵箱管理及Lucene在郵件搜索上的應(yīng)用</p><p> 摘要:本文闡述了設(shè)計與實現(xiàn)支持全文檢索的郵件代理服務(wù)平臺的理論基礎(chǔ),設(shè)計思想,整體架構(gòu)等。其中最主要的是應(yīng)用了J2EE中的JavaMail、JMS、EJB3中的消息驅(qū)動Bean和Lucene。本文著重闡述了Lucene全文索引及檢索技術(shù)在該系統(tǒng)中的應(yīng)用,包括索引的建立,索引的修改,搜索,對搜索結(jié)果的高
8、亮顯示等。</p><p> 關(guān)鍵字:J2EE;JavaMail;消息驅(qū)動Bean;Lucene;全文檢索</p><p> Support Full-text Search Platform for E-mail Proxy Service</p><p> ——Management of Multiple Mailboxes and Application
9、 of Lucene in Mail Search</p><p> Abstract: This paper describes the design and implementation support for full-text indexing of e-mail proxy service platform based on the theory, design thinking, the overa
10、ll structure and so on. The most important is the use of J2EE in the JavaMail, JMS, EJB3 of Message-Driven Bean and Lucene.This article focuses on the Lucene full-text indexing and retrieval technology in the system, inc
11、luding the establishment of the index, index changes, and search on the highlighted search results display.</p><p> Key words: J2EE; JavaMail; Message-Driven Bean; Lucene; Full-text Search</p><p&
12、gt;<b> 第1章 引言</b></p><p><b> 1.1 課題背景</b></p><p> 電子郵件是一種用電子手段提供信息交換的通信方式。是Internet應(yīng)用最廣的服務(wù):通過網(wǎng)絡(luò)的電子郵件系統(tǒng),用戶可以用非常低廉的價格,以非??焖俚姆绞?,與世界上任何一個角落的網(wǎng)絡(luò)用戶聯(lián)系,這些電子郵件可以是文字、圖像、聲音等各種方式
13、。同時,用戶可以得到大量免費的新聞、專題郵件,并實現(xiàn)輕松的信息搜索。這是任何傳統(tǒng)的方式也無法相比的。正是由于電子郵件的使用簡易、投遞迅速、收費低廉,易于保存、全球暢通無阻,使得電子郵件被廣泛地應(yīng)用,它使人們的交流方式得到了極大的改變。另外,電子郵件還可以進(jìn)行一對多的郵件傳遞,同一郵件可以一次發(fā)送給許多人。最重要的是,電子郵件是整個網(wǎng)間網(wǎng)以至所有其他網(wǎng)絡(luò)系統(tǒng)中直接面向人與人之間信息交流的系統(tǒng),它的數(shù)據(jù)發(fā)送方和接收方都是人,所以極大地滿足了
14、大量存在的人與人通信的需求。</p><p> 當(dāng)今社會是信息化的社會,人們并不僅僅滿足于現(xiàn)有的電子郵件服務(wù),由于移動辦公的需要,電子郵件服務(wù)由單純的客戶端收發(fā)郵件發(fā)展到了Web郵件,但電子郵件的發(fā)展還未就此停止,現(xiàn)在的人群當(dāng)中存在一大批人是擁有不止一個電子郵箱的,他們對電子郵件服務(wù)又有了新的需求,此時電子郵件服務(wù)就必須滿足支持多個郵箱管理的功能。</p><p> 1.2 國內(nèi)外研
15、究現(xiàn)狀</p><p> 電子郵件發(fā)展到現(xiàn)在,用戶使用電子郵件服務(wù)的方式有兩種:一種是用戶使用個人計算機(jī)上的客戶端軟件,比如Outlook,F(xiàn)oxmail等。Outlook是由美國微軟公司(Microsoft)出品的免費軟件,與Internet Explorer瀏覽器軟件捆綁發(fā)行;Foxmail是由國人張小龍編寫的一個功能強(qiáng)大非商業(yè)軟件,它實現(xiàn)了真正的多用戶、多賬戶、多POP3支持,自動進(jìn)行撥號,能設(shè)置郵件過濾
16、功能,能閱讀和收發(fā)Big5碼的郵件,可以直接查看HTML格式郵件。這兩種客戶端軟件只要通過適當(dāng)?shù)呐渲煤?,就可以對郵件進(jìn)行接收和發(fā)送,但單純使用郵件客戶端程序進(jìn)行郵件的收發(fā)已經(jīng)不能滿足用戶移動辦公的需要。另一種就是使用WebMail系統(tǒng),將E-mail和Web結(jié)合在一起,即通過Web編程和適當(dāng)?shù)南到y(tǒng)設(shè)置,使用戶僅僅以訪問Web的方式就可以得到和使用完整的郵件服務(wù)的系統(tǒng)稱為WebMail系統(tǒng)。WebMail是目前Internet上最受歡迎和
17、使用最多的服務(wù)之一,也是很多網(wǎng)站必備功能之一。像網(wǎng)易、新浪等大型門戶網(wǎng)站都提供了免費的WebMail服務(wù),并在其中加入了一些別的實用功能。如Google的GMail提供給郵</p><p> 1.3 課題的目的和意義</p><p> 本課題意在設(shè)計并實現(xiàn)一種支持全文檢索的郵件代理服務(wù)平臺,使用戶進(jìn)一步感受到電子郵件服務(wù)給他們帶來的方便與快捷。雖然現(xiàn)有的郵件服務(wù)系統(tǒng)已經(jīng)比較完善,但對
18、于多個郵箱的支持還是比較少的,而且對多個郵箱中的文件進(jìn)行統(tǒng)一管理的更少,因此有必要設(shè)計并實現(xiàn)一個支持多個郵箱收發(fā)郵件的系統(tǒng)。</p><p> 對于這種服務(wù)系統(tǒng),雖然現(xiàn)在在用戶中使用地比較少,而且專門提供類似服務(wù)的系統(tǒng)也不多。但隨著電子郵件的發(fā)展,相信在這方面的需求會越來越突出,而這種系統(tǒng)將會越來越得到用戶的青睞。</p><p><b> 1.4 本章小結(jié)</b&g
19、t;</p><p> 本章主要介紹了支持全文檢索的郵件代理服務(wù)平臺的研究背景、國內(nèi)外的研究狀況及本課題的目的和意義。</p><p> 第2章 相關(guān)技術(shù)及開發(fā)工具介紹</p><p> 2.1 J2EE簡介</p><p> J2EE是一種利用Java 2平臺來簡化企業(yè)解決方案的開發(fā)、部署和管理相關(guān)的復(fù)雜問題的體系結(jié)構(gòu)。J2EE
20、技術(shù)的基礎(chǔ)就是核心Java平臺或Java 2平臺的標(biāo)準(zhǔn)版,J2EE不僅鞏固了標(biāo)準(zhǔn)版中的許多優(yōu)點,例如“編寫一次、隨處運行”的特性、方便存取數(shù)據(jù)庫的JDBC API、CORBA技術(shù)以及能夠在Internet應(yīng)用中保護(hù)數(shù)據(jù)的安全模式等等,同時還提供了對EJB(Enterprise JavaBeans)、Java Servlet API、JSP(Java Server Pages)以及XML技術(shù)的全面支持。其最終目的就是成為一個能夠使企業(yè)開發(fā)
21、者大幅縮短投放市場時間的體系結(jié)構(gòu)。</p><p> J2EE體系結(jié)構(gòu)提供中間層集成框架用來滿足無需太多費用而又需要高可用性、高可靠性以及可擴(kuò)展性的應(yīng)用的需求。通過提供統(tǒng)一的開發(fā)平臺,J2EE降低了開發(fā)多層應(yīng)用的費用和復(fù)雜性,同時提供對現(xiàn)有應(yīng)用程序集成強(qiáng)有力支持,完全支持Enterprise JavaBeans,有良好的向?qū)еС执虬筒渴饝?yīng)用,添加目錄支持,增強(qiáng)了安全機(jī)制,提高了性能[13]。</p>
22、;<p> 2.1.1 JavaMail</p><p> JavaMail,顧名思義,提供給開發(fā)者處理電子郵件相關(guān)的編程接口。它是Sun發(fā)布的用來處理email的API。它可以方便地執(zhí)行一些常用的郵件傳輸。我們可以基于JavaMail開發(fā)出類似于Microsoft Outlook的應(yīng)用程序。</p><p> 雖然JavaMail是Sun的API之一,但它目前還沒有
23、被加在標(biāo)準(zhǔn)的java開發(fā)工具包中(Java Development Kit),這就意味著你在使用前必須另外下載JavaMail文件。除此以外,你還需要有Sun的JavaBeans Activation Framework (JAF)。JavaBeans Activation Framework的運行很復(fù)雜,在這里簡單的說就是JavaMail的運行必須得依賴于它的支持。在Windows 2000下使用需要指定這些文件的路徑,在其它的操作系
24、統(tǒng)上也類似。</p><p> 2.1.2 JMS</p><p> JMS(Java Message Service,Java消息服務(wù))是一組Java應(yīng)用接口,它提供創(chuàng)建、發(fā)送、接收、讀取消息的服務(wù)。JMS API定義了一組公共的應(yīng)用程序接口和相應(yīng)語法,使得Java應(yīng)用能夠和各種消息中間件進(jìn)行通信,這些消息中間件包括IBM MQ-Series、Microsoft MSMQ及純Jav
25、a的Sonic MQ。通過使用JMS API,開發(fā)人員無需掌握不同消息產(chǎn)品的使用方法,也可以使用統(tǒng)一的JMS API來操縱各種消息中間件。通過使用JMS,能夠最大限度地提升消息應(yīng)用的可移植性。JMS既支持點對點的消息通信,也支持發(fā)布/訂閱式的消息通信。</p><p> 2.1.3 EJB3</p><p> EJB是sun的服務(wù)器端組件模型,最大的用處是部署分布式應(yīng)用程序,類似微軟
26、的com技術(shù)。憑借java跨平臺的優(yōu)勢,用EJB技術(shù)部署的分布式系統(tǒng)可以不限于特定的平臺。</p><p> EJB(Enterprise Java Bean)是J2EE的一部分,定義了一個用于開發(fā)基于組件的企業(yè)多重應(yīng)用程序的標(biāo)準(zhǔn)。其特點包括網(wǎng)絡(luò)服務(wù)支持和核心開發(fā)工具(SDK)。</p><p> 在J2EE里,Enterprise Java Beans(EJB)稱為Java企業(yè)Bea
27、n,是Java的核心代碼,分別是會話Bean(Session Bean),實體Bean(Entity Bean)和消息驅(qū)動Bean(MessageDriven Bean)。</p><p> Session Bean用于實現(xiàn)業(yè)務(wù)邏輯,它可以是有狀態(tài)的,也可以是無狀態(tài)的。每當(dāng)客戶端請求時,容器就會選擇一個Session Bean來為客戶端服務(wù)。Session Bean可以直接訪問數(shù)據(jù)庫,但更多時候,它會通過Ent
28、ity Bean實現(xiàn)數(shù)據(jù)訪問。</p><p> Entity Bean是域模型對象,用于實現(xiàn)O/R映射,負(fù)責(zé)將數(shù)據(jù)庫中的表記錄映射為內(nèi)存中的Entity對象,事實上,創(chuàng)建一個Entity Bean對象相當(dāng)于新建一條記錄,刪除一個Entity Bean會同時從數(shù)據(jù)庫中刪除對應(yīng)記錄,修改一個Entity Bean時,容器會自動將Entity Bean的狀態(tài)和數(shù)據(jù)庫同步。</p><p>
29、 MessageDriven Bean是EJB2.0中引入的新的企業(yè)Bean,它基于JMS消息,只能接收客戶端發(fā)送的JMS消息然后處理。MDB實際上是一個異步的無狀態(tài) Session Bean,客戶端調(diào)用MDB后無需等待,立刻返回,MDB將異步處理客戶請求。這適合于需要異步處理請求的場合,比如訂單處理,這樣就能避免客戶端長時間的等待一個方法調(diào)用直到返回結(jié)果。</p><p> 2.2 Lucene</p
30、><p> Lucene是apache軟件基金會jakarta項目組的一個子項目,是一個開放源代碼的全文檢索引擎工具包,即它不是一個完整的全文檢索引擎,而是一個全文檢索引擎的架構(gòu),提供了完整的查詢引擎和索引引擎,部分文本分析引擎(英文與德文兩種西方語言)。Lucene的目的是為軟件開發(fā)人員提供一個簡單易用的工具包,以方便的在目標(biāo)系統(tǒng)中實現(xiàn)全文檢索的功能,或者是以此為基礎(chǔ)建立起完整的全文檢索引擎。</p>
31、<p> Lucene作為一個全文檢索引擎,其具有如下突出的優(yōu)點:</p><p> 索引文件格式獨立于應(yīng)用平臺。Lucene定義了一套以8位字節(jié)為基礎(chǔ)的索引文件格式,使得兼容系統(tǒng)或者不同平臺的應(yīng)用能夠共享建立的索引文件。</p><p> 在傳統(tǒng)全文檢索引擎的倒排索引的基礎(chǔ)上,實現(xiàn)了分塊索引,能夠針對新的文件建立小文件索引,提升索引速度。然后通過與原有索引的合并,達(dá)到
32、優(yōu)化的目的。</p><p> 優(yōu)秀的面向?qū)ο蟮南到y(tǒng)架構(gòu),使得對于Lucene擴(kuò)展的學(xué)習(xí)難度降低,方便擴(kuò)充新功能。</p><p> 設(shè)計了獨立于語言和文件格式的文本分析接口,索引器通過接受Token流完成索引文件的創(chuàng)立,用戶擴(kuò)展新的語言和文件格式,只需要實現(xiàn)文本分析的接口。</p><p> 已經(jīng)默認(rèn)實現(xiàn)了一套強(qiáng)大的查詢引擎,用戶無需自己編寫代碼即使系統(tǒng)可獲
33、得強(qiáng)大的查詢能力,Lucene的查詢實現(xiàn)中默認(rèn)實現(xiàn)了布爾操作、模糊查詢、分組查詢等等[9]。</p><p> 2.3 開發(fā)環(huán)境及工具</p><p> 開發(fā)環(huán)境:Windows XP SP2</p><p> Java環(huán)境:JDK 6.0</p><p> 開發(fā)工具:MyEclipse 6.0</p><p&g
34、t; 部署環(huán)境:Sun Java System Application Server 9.1</p><p> 第3章 系統(tǒng)總體設(shè)計</p><p> 3.1 總體設(shè)計框架</p><p> 支持全文檢索的郵件代理服務(wù)平臺主要是利用J2EE和Lucene來架構(gòu),涉及到J2EE中的JSP、Servlet、JavaMail、JMS、EJB3中的消息驅(qū)動Bea
35、n,以及Lucene中的索引、搜索和高亮等。該系統(tǒng)的整體框架如圖3-1所示。</p><p> 圖3-1 支持全文檢索的郵件代理服務(wù)平臺整體框架</p><p> 3.2 系統(tǒng)基本功能</p><p> 支持全文檢索的郵件代理服務(wù)平臺主要是為滿足用戶有多個郵箱,并且需要對多個郵箱進(jìn)行統(tǒng)一管理,包括接收各個郵箱中的郵件,通過各個不同的郵箱來發(fā)送郵件等,因此在該
36、系統(tǒng)中需要提供的功能有:</p><p> 接收多個郵箱中的郵件;</p><p> 通過不同的郵箱發(fā)送不同的郵件;</p><p><b> 添加不同的郵箱;</b></p><p> 可以對收件箱中的郵件進(jìn)行全文檢索;</p><p> 對用戶密碼進(jìn)行修改;</p>&
37、lt;p> 對已添加的郵箱進(jìn)行修改。</p><p> 3.2.1 系統(tǒng)模塊結(jié)構(gòu)圖</p><p> 根據(jù)系統(tǒng)所具有的基本功能得到該系統(tǒng)的功能模塊結(jié)構(gòu)示意圖,如圖3-2所示。</p><p> 圖3-2 系統(tǒng)功能模塊結(jié)構(gòu)示意圖</p><p> 3.2.2 各個模塊功能概述</p><p> 該系
38、統(tǒng)中包含的功能有:注冊、登錄、接收郵件、寫郵件、郵件管理(查看/刪除/回復(fù))、已發(fā)郵件管理(查看/刪除/轉(zhuǎn)發(fā))、郵箱管理(添加/刪除/修改)、郵件的索引和郵件的搜索。各個功能模塊分別介紹如下:</p><p><b> 1.注冊</b></p><p> 注冊部分主要是為了使剛開始使用該系統(tǒng)的用戶能有自己唯一的一個賬戶,并能在注冊之后使用該系統(tǒng)。用戶所提供的密碼是
39、經(jīng)過DES加密后才存儲的。</p><p><b> 2.登錄</b></p><p> 登錄部分主要是為了驗證用戶所提供的用戶名和密碼的合法性,若合法的話,則提供給該用戶相應(yīng)的可靠服務(wù),否則做非法用戶處理,并且要求該用戶注冊或者是提示該用戶他所提供的用戶名和密碼是非法的,要求其重新登錄。</p><p><b> 3.接收郵件
40、</b></p><p> 接收郵件部分主要是為了幫用戶接收用戶所提供的郵箱中的郵件,這是一個后臺的服務(wù)程序,用戶自己是感覺不到什么時候接收到郵件的,但后臺程序會定時地為每一個用戶提供郵件接收的服務(wù)。并且每個郵箱中的郵件是不會被重復(fù)接收的。</p><p><b> 4.發(fā)送郵件</b></p><p> 發(fā)送郵件部分是給用戶
41、提供發(fā)送新郵件之用,這里可以支持不同的郵箱發(fā)送郵件,就是說雖然用戶是在同一個地方寫新郵件、發(fā)送郵件,但是該系統(tǒng)可以根據(jù)用戶所提供的不同的發(fā)件人,讓用戶用他自己的不同郵箱來發(fā)送信件,而接收信件的人則看到的也是不同的發(fā)件人。</p><p> 5.郵件管理(查看/刪除/回復(fù))</p><p> 郵件管理部分主要是提供用戶查看郵件、刪除郵件和回復(fù)郵件的功能。當(dāng)用戶接收到新郵件時,收到的新郵件
42、都會重點提示用戶這是一封新郵件,讓用戶很快就能看到是否有新的郵件。當(dāng)有郵件時,用戶可以查看郵件。查看的時候,如果用戶想回復(fù)該郵件,則點擊“回復(fù)”,系統(tǒng)就自動產(chǎn)生一封新的郵件,用戶只需寫好信的內(nèi)容即可發(fā)送。當(dāng)然,如果用戶認(rèn)為收件箱中的郵件已經(jīng)沒有利用價值,就可以刪除郵件。</p><p> 6.已發(fā)郵件管理(查看/刪除/轉(zhuǎn)發(fā))</p><p> 已發(fā)郵件管理部分主要是為了用戶方便管理已經(jīng)
43、發(fā)送的郵件和未發(fā)送成功的郵件。凡是用戶發(fā)送過的郵件,不管是否發(fā)送成功,用戶都可以在已發(fā)郵件中找到該郵件,并且可以刪除和轉(zhuǎn)發(fā)。</p><p> 7.郵箱管理(添加/刪除/修改)</p><p> 郵箱管理部分主要是讓用戶可以添加自己已有的所有郵箱,之后該系統(tǒng)可以幫用戶在后臺接收這些郵箱中的所有郵件,這是為了方便用戶統(tǒng)一管理自己的所有郵箱。在這里,用戶可以隨意添加、刪除和修改自己的郵箱。
44、</p><p><b> 8.郵件的索引</b></p><p> 郵件的索引主要是為郵件的搜索做準(zhǔn)備,只要系統(tǒng)在后臺接收到新郵件,系統(tǒng)就會自動的為該郵件建立索引,方便用戶以后對該郵件的搜索。這是由Lucene來實現(xiàn)的,這與直接對數(shù)據(jù)庫進(jìn)行搜索相比較,效率比較高,而且功能也比較強(qiáng),易于在以后擴(kuò)展。</p><p><b> 9
45、.郵件的搜索</b></p><p> 郵件的搜索主要是提供給用戶查找自己的相關(guān)郵件之用,這是通過之前建立的郵件全文索引來實現(xiàn)的,應(yīng)用Lucene中提供的搜索功能構(gòu)建自己的搜索器,將搜索的結(jié)果返回給用戶,并高亮顯示一些關(guān)鍵字,能使用戶很準(zhǔn)確的找到自己想要的郵件。</p><p> 3.3 數(shù)據(jù)庫設(shè)計</p><p> 支持全文檢索的郵件代理服務(wù)平
46、臺中存在有四種不同用處的表,包括用戶表,已收郵件表,已發(fā)郵件表,郵箱表。</p><p> 3.3.1 用戶表</p><p> 用戶表是用來存放已注冊的用戶名和密碼,因此該表只有2個字段,包括用戶名和密碼。用戶實體E-R圖如圖3-3所示,用戶表的具體各字段設(shè)計如表3-1所示。</p><p> 圖3-3 用戶實體E-R圖</p><p&
47、gt;<b> 表3-1 用戶表</b></p><p> 3.3.2 已收郵件表</p><p> 已收郵件表是用來存放該用戶所有郵箱中的郵件,該表中有8個字段,包括序列sid、郵件的ID、發(fā)件人mailfrom、收件人mailto、郵件主題subject、郵件內(nèi)容content、時間time和狀態(tài)state。已收郵件實體E-R圖如圖3-4所示,已收郵件表的
48、具體各字段設(shè)計如表3-2所示。</p><p> 圖3-4 已收郵件實體E-R圖</p><p> 表3-2 已收郵件表</p><p> 3.3.3 已發(fā)郵件表</p><p> 已發(fā)郵件表是用來存放該用戶已經(jīng)發(fā)送過的郵件,該表中有8個字段,包括序列sid、郵件的ID、發(fā)件人mailfrom、收件人mailto、郵件主題subje
49、ct、郵件內(nèi)容content、時間time和狀態(tài)state。該表與收件箱表的設(shè)計相同,已發(fā)郵件實體E-R圖如圖3-5所示,已發(fā)郵件表的具體各字段設(shè)計如表3-3所示。</p><p> 圖3-5 已發(fā)郵件實體E-R圖</p><p> 表3-3 已發(fā)郵件表</p><p> 3.3.4 郵箱表</p><p> 郵箱表是用來存放該用戶
50、所添加的所有郵箱,該表中有3個字段,包括序列id、郵箱名email和密碼password。郵箱實體E-R圖如圖3-6所示,郵箱表的具體各字段設(shè)計如表3-4所示。</p><p> 圖3-6 郵箱實體E-R圖</p><p><b> 表3-4 郵箱表</b></p><p><b> 3.4 本章小結(jié)</b><
51、;/p><p> 本章主要介紹了支持全文檢索的郵件代理服務(wù)平臺的總體設(shè)計框架、系統(tǒng)基本功能模塊、數(shù)據(jù)庫的設(shè)計,讓讀者對該系統(tǒng)有一個總體的認(rèn)識。下一章將具體闡述郵箱管理、用戶管理及JMS應(yīng)用的詳細(xì)設(shè)計和實現(xiàn)。</p><p> 第4章 部分系統(tǒng)模塊詳細(xì)設(shè)計與實現(xiàn)</p><p> 在支持全文檢索的郵件代理服務(wù)平臺中一共有六個模塊,如圖3-2所示,分別為注冊登錄、郵
52、件管理、寫郵件、郵箱管理、用戶管理和郵件檢索。由于該系統(tǒng)是由兩人合作完成,因此在本章將詳細(xì)介紹該系統(tǒng)的郵箱管理和用戶管理模塊。</p><p> 4.1 郵箱管理模塊</p><p> 在郵箱管理模塊中,包括添加郵箱、修改郵箱和刪除郵箱,其給用戶所提供的功能為:用戶可以添加其所有郵箱到該系統(tǒng)中,系統(tǒng)在后臺負(fù)責(zé)管理其已添加的所有郵箱。但有一點用戶應(yīng)該注意的:在添加郵箱的時候,用戶應(yīng)該提
53、供其正確的郵箱用戶名和密碼,確保系統(tǒng)能真正管理該郵箱。因為系統(tǒng)不會去檢查該郵箱的合法性。當(dāng)然用戶還可以修改其之前所添加的郵箱,以防用戶輸入錯誤。如該郵箱對用戶來說已經(jīng)沒有使用價值的話,該郵箱可以被刪除。</p><p> 4.1.1 添加郵箱</p><p> 在該模塊中的添加郵箱部分,系統(tǒng)只是比較簡單的將用戶所提供的用戶名和密碼存入了系統(tǒng)的數(shù)據(jù)庫中。若用戶提供的郵箱用戶名和密碼有誤
54、的話,系統(tǒng)將接收不到該郵箱中的郵件,自然不能為用戶起到管理郵箱的作用。</p><p> 在用戶添加郵箱的時候,為了能讓用戶能及時的看到他那個郵箱中的郵件,在添加郵箱成功的時候,程序會開一個接收郵件的線程,讓這個線程去接收這個郵箱中的郵件。這樣在后臺開啟一個線程,畢業(yè)設(shè)計論文代做平臺 《580畢業(yè)設(shè)計網(wǎng)》 是專業(yè)代做團(tuán)隊 也有大量畢業(yè)設(shè)計成品提供參考 www.bysj580.com QQ34496499
55、74</p><p> 用戶也不能覺察到接收郵件的過程,但后臺程序確實已經(jīng)開始接收郵件的工作了。只要過一定時間,用戶就可以在他的收件箱中看到已經(jīng)收到的郵件。</p><p> 該模塊中添加郵箱部分的具體實現(xiàn):</p><p> 用request類中的getParameter()方法得到用戶在setupMailBox.jsp頁面中所提交的郵箱名和密碼;</
56、p><p> 用DES加密算法對用戶提交的密碼進(jìn)行加密處理;</p><p> 根據(jù)以上得到的郵箱名和密碼,實例化一個郵箱類;</p><p> 通過JNDI查找數(shù)據(jù)源jdbc/oracleds,得到一個數(shù)據(jù)庫的連接;</p><p> 將實例化的一個郵箱類,通過MailBoxDAOJdbc類來存入數(shù)據(jù)庫;</p><
57、p> 存入數(shù)據(jù)庫成功的話就開啟一個接收郵件的一個線程,來接收剛添加的郵箱中的郵件。否則,頁面跳轉(zhuǎn)回添加郵箱的頁面setupMailBox.jsp。</p><p> 在該模塊的實現(xiàn)中,添加郵箱部分用到了JDBC、Servlet和JSP技術(shù)。實現(xiàn)的流程圖如圖4-1所示。</p><p> 圖4-1 添加郵箱部分流程圖</p><p><b>
58、部分代碼簡析:</b></p><p> //通過request類的getParameter()方法得到郵箱名和密碼</p><p> String email=request.getParameter("email").toString();</p><p> String mailServerName=request.get
59、Parameter("mailServerName").toString();</p><p> String emailpwd= request.getParameter("emailpwd").toString();</p><p><b> //DES加密</b></p><p> Strin
60、g emailpwd=DES.encrypt(request.getParameter("emailpwd").toString());</p><p> //實例化一個郵箱類</p><p> MailBox mb=new MailBox();</p><p> mb.setEmail(email+mailServerName);//設(shè)置
61、郵箱名</p><p> mb.setPassword(emailpwd);//設(shè)置密碼</p><p> //通過JNDI查找數(shù)據(jù)源</p><p> Context initContext;</p><p> initContext = new InitialContext();</p><p> Dat
62、aSource ds = (DataSource) initContext.lookup("jdbc/oracleds");</p><p> //將郵箱類存入數(shù)據(jù)庫</p><p> String insertSql = "insert into " + currentUser</p><p> + "mai
63、lbox(id,email,password) values(" + currentUser+ "_seq.nextval,?,?)";</p><p> PreparedStatement pstmt;</p><p> pstmt = conn.prepareStatement(insertSql);</p><p> pst
64、mt.setString(1, mb.getEmail());</p><p> pstmt.setString(2, mb.getPassword());</p><p> pstmt.execute();</p><p> pstmt.close();</p><p> 4.1.2 修改郵箱</p><p&g
65、t; 在該模塊的修改郵箱部分,系統(tǒng)也只是簡單的將數(shù)據(jù)庫中原有的密碼更新為用戶新提交的密碼,并不會去檢查別的,因此該功能的實現(xiàn)比較簡單。</p><p> 該模塊中修改郵箱部分的具體實現(xiàn):</p><p> 用request類中的getParameter()方法得到用戶在modifyMailBox.jsp頁面中所提交的郵箱名和密碼;</p><p> 用DES
66、加密算法對用戶提交的密碼進(jìn)行加密處理;</p><p> 根據(jù)以上得到的郵箱名和密碼,實例化一個郵箱類;</p><p> 通過JNDI查找數(shù)據(jù)源jdbc/oracleds,得到一個數(shù)據(jù)庫的連接;</p><p> 將實例化的一個郵箱類,通過MailBoxDAOJdbc類中的updateMailBox方法來更新數(shù)據(jù)庫中的密碼。</p><p
67、> 修改郵箱部分的流程圖如圖4-2所示。</p><p> 圖4-2 修改郵箱部分流程圖</p><p><b> 部分代碼簡析:</b></p><p> 由于在添加郵箱部分已經(jīng)分析過部分相同的代碼,在這里只簡析不同的代碼片段。</p><p> //根據(jù)郵箱名來更新郵箱密碼</p>&l
68、t;p> String updateSql = "update " + currentUser + "mailbox set password='"+ password + "' where id=" + id;</p><p> PreparedStatement pstmt;</p><p> ps
69、tmt = conn.prepareStatement(updateSql);</p><p> pstmt.execute();</p><p> pstmt.close();</p><p> 4.1.3 刪除郵箱</p><p> 在該模塊的刪除郵箱部分,系統(tǒng)根據(jù)郵箱在數(shù)據(jù)庫中存儲的id來刪除郵箱在數(shù)據(jù)庫中的記錄,因此該功能的
70、實現(xiàn)也比較簡單。</p><p> 該模塊中修改郵箱部分的具體實現(xiàn):</p><p> 用request類中的getParameter()方法得到用戶在modifyMailBox.jsp頁面中得到郵箱在數(shù)據(jù)庫中的id;</p><p> 通過JNDI查找數(shù)據(jù)源jdbc/oracleds,得到一個數(shù)據(jù)庫的連接;</p><p> 將實例
71、化的一個郵箱類,通過MailBoxDAOJdbc類中的deleteMailBox方法來刪除數(shù)據(jù)庫中的郵箱。</p><p> 修改郵箱部分的流程圖如圖4-3所示。</p><p> 圖4-3 刪除郵箱部分流程圖</p><p><b> 部分代碼簡析:</b></p><p> 由于在添加郵箱部分已經(jīng)分析過部分相
72、同的代碼,在這里只簡析不同的代碼片段。</p><p> //根據(jù)郵箱ID來刪除郵箱</p><p> String deleteSql = "delete from " + currentUser + "mailbox where id="+ id;</p><p> PreparedStatement pstmt;&
73、lt;/p><p> pstmt = conn.prepareStatement(deleteSql);</p><p> pstmt.execute();</p><p> pstmt.close();</p><p> 4.2 用戶管理模塊</p><p> 在用戶管理模塊中,只包括用戶密碼的修改部分,其給
74、用戶所提供的功能為:用戶可以為自己在該系統(tǒng)中的當(dāng)前用戶修改密碼,這只是為了某些用戶要修改密碼的需要。</p><p> 該模塊中用戶密碼修改部分的具體實現(xiàn):</p><p> 用request類中的getParameter()方法得到用戶在modifyUserpwd.jsp頁面中得到用戶輸入的先前密碼和新的密碼;</p><p> 根據(jù)當(dāng)前用戶,從數(shù)據(jù)庫中讀取
75、先前的密碼,與用戶輸入的當(dāng)前密碼比對,看是否相同;</p><p> 如果相同的話,則實例化一個用戶類,將數(shù)據(jù)庫中的密碼更新為用戶輸入的新密碼,若不相同的話,修改密碼失敗。</p><p> 用戶密碼修改部分的流程圖如圖4-4所示。</p><p> 圖4-4 用戶密碼修改部分流程圖</p><p><b> 部分代碼簡析:
76、</b></p><p> //更新數(shù)據(jù)庫中的用戶密碼</p><p> public static final String UPDATE_USER_SQL = "update users set password=? where username=?";</p><p> PreparedStatement pstmt =
77、conn.prepareStatement(UPDATE_USER_SQL);</p><p> pstmt.setString(1, u.getPassword());</p><p> pstmt.settring(2, u.getUsername());</p><p> pstmt.executeUpdate();</p><p&g
78、t; pstmt.close();</p><p> 4.3 JMS應(yīng)用</p><p> 在本系統(tǒng)中,為了提高系統(tǒng)后臺的工作效率,采用了消息中間件,實現(xiàn)異步的消息傳遞。</p><p> 這對于本系統(tǒng)的穩(wěn)定性是很關(guān)鍵的。由于本系統(tǒng)在后臺要不斷地幫用戶處理業(yè)務(wù),包括郵件的接受和郵件的索引,而就這兩部分,在系統(tǒng)中就有可能隨著時間的推移而業(yè)務(wù)不斷地加重。因為有
79、可能使用該系統(tǒng)的用戶會越來越多,這樣的話接收郵件和索引郵件的工作量就會越來越重。如果采用同步機(jī)制,則嚴(yán)重影響系統(tǒng)的運行效率,用戶體驗也會越來越差,最終本系統(tǒng)就選擇使用JMS的異步消息處理來解決此問題。</p><p> 4.3.1 JMS消息模型</p><p> 在JMS中,提供了兩種模型:一種是點對點模型,另一種是發(fā)布/訂閱模型。</p><p> 點對
80、點模型是與消息隊列一起工作的。它們是點對點的,是因為客戶端將消息發(fā)送到一個隊列,而另一個客戶端將從這個隊列中接收消息。點對點模型示意圖如圖4-5所示。</p><p> 圖4-5 點對點模型示意圖</p><p> 發(fā)布/訂閱模型是發(fā)送方針對一個主題發(fā)送消息,多個接收方可以訂閱他們的主題。一個主題消息只能被傳遞給訂閱該主題的接收方,同時一個接收方只能接收他所訂閱的主題中的消息。發(fā)布/訂
81、閱模型示意圖如圖4-6所示。</p><p> 圖4-6 發(fā)布/訂閱模型示意圖</p><p> 4.3.2 消息模型的選擇</p><p> 根據(jù)本系統(tǒng)的特點,我們選擇了點對點的消息模型,這是出于容易構(gòu)建本系統(tǒng)的基礎(chǔ)上的。</p><p> 4.3.3 點對點模型在系統(tǒng)中的應(yīng)用</p><p> 確定選
82、擇點對點模型之后,開始構(gòu)建本系統(tǒng)中特有的點對點模型。在本系統(tǒng)中,消息的生產(chǎn)者是接收郵件的線程,接收郵件的線程一接收完一封郵件就馬上向消息隊列中發(fā)送一條消息。而本系統(tǒng)中的消息隊列是通過Sun Java System Application Server這個應(yīng)用服務(wù)器提供的,只要對服務(wù)器中的某些設(shè)置項進(jìn)行適當(dāng)?shù)呐渲眉纯僧a(chǎn)生一個消息隊列。消息的消費者是消息驅(qū)動Bean,這是EJB3里提供的。只要消息隊列中一有消息,EJB容器就會自動讓消息驅(qū)動
83、Bean去處理消息。在本系統(tǒng)中實現(xiàn)的點對點消息模型示意圖如圖4-7所示。</p><p> 圖4-7 系統(tǒng)實現(xiàn)點對點模型示意圖</p><p> 由于接收郵件是多線程的,因此消息驅(qū)動Bean的處理也是多線程的,這樣大大地提高了本系統(tǒng)的性能。但這樣也給系統(tǒng)帶來了其他問題,如線程之間的同步問題,這下一章講到郵件索引的時候會給出解決方案。</p><p> 4.3.
84、4 消息驅(qū)動Bean的實現(xiàn)</p><p> 本系統(tǒng)中,消息驅(qū)動Bean(MDB)是一個很重的部分。MDB負(fù)責(zé)將郵件存入數(shù)據(jù)庫并索引郵件。</p><p><b> 1.具體實現(xiàn)</b></p><p> 當(dāng)消息到達(dá)時,判斷是不是欲接收的消息,若是的話,就下一步,否則就不接收;</p><p> 將消息轉(zhuǎn)換為本
85、地的一般郵件對象,將郵件對象存入數(shù)據(jù)庫;</p><p> 若成功存入數(shù)據(jù)庫,則索引這郵件對象,否則就不索引。</p><p><b> 2.核心代碼:</b></p><p> public void onMessage(Message message) {</p><p> ObjectMessage oms
86、g = null;</p><p> JMSMessage jmsg = null;</p><p><b> try {</b></p><p> if (message instanceof ObjectMessage) {</p><p> omsg = (ObjectMessage) message;&l
87、t;/p><p> jmsg = (JMSMessage)omsg.getObject();//轉(zhuǎn)化為本地對象</p><p> String username=jmsg.getUsername();</p><p> String currentUser = username.substring(username.lastIndexOf("/"
88、;)+1, </p><p> username.length());</p><p> MailMessage msg=jmsg.getMsg();//獲取郵件對象</p><p> MsgSaveToDB mstdb=new MsgSaveToDB();</p><p> boolean falg=false;</p>
89、<p> falg=mstdb.saveMessage(currentUser, msg);//保存郵件</p><p><b> if(falg){</b></p><p> IndexUtil.addIndex(jmsg);//索引郵件</p><p><b> }</b></p>
90、<p><b> }</b></p><p> } catch (Exception e) {</p><p> e.printStackTrace();</p><p><b> }</b></p><p><b> }</b></p>&l
91、t;p><b> 4.4 本章小結(jié)</b></p><p> 本章詳細(xì)地介紹了支持全文檢索的郵件代理服務(wù)平臺中的兩個模塊:郵箱管理和用戶管理。這兩個模塊主要是側(cè)重數(shù)據(jù)庫的插入、刪除和更新,使用戶比較方便的管理其所有郵箱和其賬號密碼。下一章將重點介紹在該系統(tǒng)中郵件檢索模塊的詳細(xì)設(shè)計與實現(xiàn)。</p><p> 第5章 郵件檢索模塊詳細(xì)設(shè)計與實現(xiàn)</p
92、><p> 在支持全文檢索的郵件代理服務(wù)平臺中,郵件檢索模塊主要包括兩部分:1.郵件的索引;2.郵件的搜索。本章將具體介紹Lucene各方面的原理及在該系統(tǒng)中的應(yīng)用,包括對每一封郵件建立索引的過程、對郵件的搜索過程和對搜索結(jié)果的高亮顯示。</p><p> 5.1 郵件的索引</p><p> 在該系統(tǒng)中的郵件索引是應(yīng)用Lucene來實現(xiàn)的。</p>
93、<p> 5.1.1 Lucene索引介紹</p><p> Lucene是一個高性能的java全文檢索工具包,它使用的是倒排文件索引結(jié)構(gòu)。從實現(xiàn)方式上來看,倒排索引是典型的為滿足實際應(yīng)用需要而設(shè)計的一種數(shù)據(jù)結(jié)構(gòu)。這種數(shù)據(jù)結(jié)構(gòu)中的每一個元素是一個索引項,每一個索引項是由關(guān)鍵字屬性值和關(guān)鍵字關(guān)聯(lián)記錄,或者記錄的存放地址組成。這種結(jié)構(gòu)的最大特點是改變了以往的檢索過程。通常的查找方法是先確定文檔,然
94、后在文檔中順序查找后續(xù)的文檔。倒排索引則是利用索引關(guān)鍵字直接確定文檔列表,最后才確定希望找到的文檔列表[2]。</p><p> Lucene索引結(jié)構(gòu)圖如圖5-1所示:</p><p> 圖5-1 Lucene索引結(jié)構(gòu)圖</p><p> 在Lucene中,索引文件的存儲還分兩種結(jié)構(gòu):一種是多文件索引結(jié)構(gòu),另一種是復(fù)合索引結(jié)構(gòu)。</p><
95、p> 多文件索引是使用一系列索引文件分別存儲索引,分散管理數(shù)據(jù)的索引存儲格式。多文件索引在打開時需要讀取大量文件,會大大占用系統(tǒng)的文件句柄等資源,造成系統(tǒng)響應(yīng)速度慢,甚至系統(tǒng)崩潰[2]。因此,在本系統(tǒng)中,我們采用復(fù)合索引結(jié)構(gòu)。</p><p> 復(fù)合索引是把索引相關(guān)的一系列數(shù)據(jù)結(jié)構(gòu)組織到少數(shù)幾個文件中進(jìn)行管理的索引存儲模式。復(fù)合索引把所有的索引數(shù)據(jù)被組合成簡單的3個文件,大大減少了打開大量文件的壓力。但
96、是使用統(tǒng)一文件存儲大量數(shù)據(jù)會造成數(shù)據(jù)更新的問題,每次更改需要操作一個大的數(shù)據(jù)文件,讀取和存儲都會比較慢。對本系統(tǒng)來說,因為數(shù)據(jù)量不是很大,所以并不會產(chǎn)生大的數(shù)據(jù)文件。因此,選擇以這種結(jié)構(gòu)來存儲郵件的索引文件是一種比較好的解決方案。</p><p> 5.1.2 Lucene中的分詞</p><p> 對于分詞,在Lucene這個全文檢索工具包中,是一個非常重要的。因為如果要對一篇文章
97、建立全文索引,就必須先對這篇文章進(jìn)行文本分析,對文章要進(jìn)行有意義的分詞。這就必須要用到分詞器。</p><p> 由于Lucene不是本國人開發(fā)的全文檢索工具包,因此Lucene中自帶的分詞器對于中文分詞的支持不是很好。Lucene包中有兩個支持中文的分詞器:一個是ChineseAnalyzer,另一個是CJKAnalyzer。但是ChineseAnalyzer這個分詞器只是單字切分,而CJKAnalyzer分
98、詞器則是一個二分法的分詞器。因此,總的來說,Lucene自帶包中的分詞器對中文分詞的支持都不是很好。</p><p> 國內(nèi)有一個比較出名的中文分詞器,是中科院計算所開發(fā)的ICTCLAS。但由于這個分詞器是用C++開發(fā)的,因此如果在Java應(yīng)用程序中使用的話,容易出現(xiàn)不穩(wěn)定的現(xiàn)象。畢業(yè)設(shè)計論文代做平臺 《580畢業(yè)設(shè)計網(wǎng)》 是專業(yè)代做團(tuán)隊 也有大量畢業(yè)設(shè)計成品提供參考 www.bysj580.com Q
99、Q3449649974</p><p> 最后,在我們這個系統(tǒng)中選擇一個第三方提供的分詞器——JE分詞器。這個分詞器是基于詞庫的,所以分詞的效果相對其余分詞器的分詞效果要好。</p><p> 各種分詞器分詞效果比較:</p><p> 對“我愛我偉大的老爸老媽,我愛我壯麗的中華!”這句話進(jìn)行分詞。</p><p> ChineseA
100、nalyzer分詞結(jié)果:</p><p> 我 | 愛 | 我 | 偉 | 大 | 的 | 老 | 爸 | 老 | 媽 | 我 | 愛 | 我 | 壯 | 麗 | 的 | 中 | 華</p><p> CJKAnalyzer分詞結(jié)果:</p><p> 我愛 | 愛我 | 我偉 | 偉大 | 大的 | 的老 | 老爸 | 爸老 | 老媽 | 我愛 | 愛我 |
101、 我壯 | 壯麗 | 麗的 | 的中 | 中華</p><p> JE分詞器分詞結(jié)果:</p><p> 我 | 愛我 | 偉大 | 老爸 | 老媽 | 我 | 愛我 | 壯麗 | 中華</p><p> 5.1.3 建立郵件索引</p><p> 了解Lucene建立索引過程的原理之后,我們要對本系統(tǒng)進(jìn)行定制郵件索引器。</
102、p><p> 在本系統(tǒng)中的一封郵件包括6個部分,分別是郵件ID、收件人、發(fā)件人、郵件主題、郵件內(nèi)容和發(fā)信時間。</p><p><b> 郵件索引的需求</b></p><p> 在本系統(tǒng)中,要求建立的郵件索引必須能夠支持用戶對郵件的收件人、發(fā)件人、郵件主題、郵件內(nèi)容和發(fā)信時間進(jìn)行搜索。因此在一封郵件中,除了郵件ID不被搜索到,郵件的其余部分
103、都要能被搜索到。但是郵件ID有其特殊的功能,所以在本系統(tǒng)中,每一封郵件的各個部分都建立相關(guān)的索引。</p><p><b> 建立索引的具體實現(xiàn)</b></p><p> 判斷要存放索引的路徑是否被鎖定,若沒被鎖定,就下一步,否則就等待該鎖定的路徑被解鎖;</p><p> 用路徑名和JE分詞器生成一個IndexWriter對象;<
104、/p><p> 生成一個Document對象;</p><p> 生成一個郵件ID的索引域,并加入到Document對象中;</p><p> 生成一個收件人的索引域,并加入到Document對象中;</p><p> 生成一個發(fā)件人的索引域,并加入到Document對象中;</p><p> 生成一個郵件主題的
105、索引域,并加入到Document對象中;</p><p> 生成一個郵件內(nèi)容的索引域,并加入到Document對象中;</p><p> 生成一個發(fā)信時間的索引域,并加入到Document對象中;</p><p> 將Document對象添加到IndexWriter對象中;</p><p> IndexWriter對象進(jìn)行索引優(yōu)化操作
106、;</p><p> 關(guān)閉IndexWriter。</p><p> 建立郵件索引核心代碼:</p><p> public static boolean addIndex(String path,MailMessage msg){</p><p> String indexPath=path;</p><p>
107、;<b> try {</b></p><p> while(IndexReader.isLocked(indexPath)){;}</p><p> IndexWriter writer = new IndexWriter(indexPath,new MMAnalyzer());</p><p> Document doc=new D
108、ocument();</p><p> Field field=new Field("id",msg.getId(),</p><p> Field.Store.YES,Field.Index.UN_TOKENIZED);</p><p> doc.add(field);</p><p> field=new Fi
109、eld("from",msg.getMailfrom(),</p><p> Field.Store.YES,Field.Index.TOKENIZED);</p><p> doc.add(field);</p><p> field=new Field("to",msg.getMailto(),</p>
110、<p> Field.Store.YES,Field.Index.TOKENIZED);</p><p> doc.add(field);</p><p> field=new Field("subject",msg.getSubject(),</p><p> Field.Store.YES,Field.Index.TOKE
111、NIZED);</p><p> doc.add(field);</p><p> field=new Field("content",StringUtil.removeHtml(msg.getContent()),</p><p> Field.Store.YES,Field.Index.TOKENIZED);</p>&l
112、t;p> doc.add(field);</p><p> field=new Field("time",msg.getTime(),</p><p> Field.Store.YES,Field.Index.TOKENIZED);</p><p> doc.add(field);</p><p> wri
113、ter.addDocument(doc);</p><p> writer.optimize();</p><p> writer.close();</p><p> } catch (IOException e) {</p><p> e.printStackTrace();</p><p> return
114、 false;</p><p> } catch (Exception e) {</p><p> e.printStackTrace();</p><p><b> }</b></p><p> return true;</p><p><b> }</b><
115、;/p><p> 郵件建立索引過程中的三處細(xì)節(jié)</p><p> 由于郵件建立索引是采用多線程實現(xiàn)的,就是在同一時刻有可能存在多個索引程序在運行。如果有一個程序在為郵件建立索引的時候,則另一個索引程序要等待其完成才能開始為郵件建立索引,否則將產(chǎn)生寫沖突。即while(IndexReader.isLocked(indexPath)){;};這行代碼是至關(guān)重要的。</p><
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- Lucene全文檢索技術(shù)在專利服務(wù)平臺中的研究與應(yīng)用.pdf
- 全文檢索應(yīng)用于郵件的設(shè)計與實現(xiàn)
- 全文檢索應(yīng)用于郵件的設(shè)計與實現(xiàn).pdf
- qq郵箱如何設(shè)置smtp代理收發(fā)郵件
- 郵件服務(wù)智能代理的研究.pdf
- PKI在安全郵件傳輸上的應(yīng)用.pdf
- 基于lucene全文檢索的搜索引擎的設(shè)計與實現(xiàn)
- 代理重加密的研究及在郵件系統(tǒng)中的應(yīng)用.pdf
- Lucene全文檢索在網(wǎng)絡(luò)教學(xué)平臺中的應(yīng)用研究.pdf
- 搜索引擎開發(fā)實踐全文檢索與lucene簡介
- 基于Lucene全文檢索的搜索引擎的設(shè)計與實現(xiàn).doc
- 可操作郵件及其在郵件社會網(wǎng)絡(luò)中的應(yīng)用.pdf
- 公司郵箱管理規(guī)定
- plc在郵件分揀中的應(yīng)用
- 基于Lucene搜索引擎的中文全文信息檢索技術(shù)的研究.pdf
- 郵件服務(wù)器上的反垃圾郵件技術(shù)設(shè)計與實現(xiàn).pdf
- 電子郵件禮儀及郵件管理-課件
- 基于Lucene的全文檢索技術(shù)研究與應(yīng)用.pdf
- 基于java的郵箱管理服務(wù)器設(shè)計與實現(xiàn)
- 企業(yè)郵箱管理規(guī)定
評論
0/150
提交評論