freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

it計(jì)算機(jī)]基于lucene的桌面搜索引擎(編輯修改稿)

2024-12-23 23:14 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 。在這樣的調(diào)用中, Lucene 會(huì)首先對(duì)所要建立索引的數(shù)據(jù)進(jìn)行分析( analysis)以使得在建立索引時(shí)可以更加容易地處理這些數(shù)據(jù),然后索引器會(huì)按Lucene 所規(guī)定的索引格式將數(shù)據(jù)寫(xiě)入索引文件。 Lucene 的文檔格式 在前面已經(jīng)提到了兩個(gè)概念: Document(文檔)和 Field(字段)。 Document 和 Field 在 Lucene的索引過(guò)程中占有舉足輕重的地位,而且,在 Lucene 的搜索部分也會(huì)涉及到相應(yīng)的概念,因此可以說(shuō)深入理解它們是使用 Lucene 的基礎(chǔ),下面將分別進(jìn)行介紹。 文檔 ( Document) 假設(shè)現(xiàn)在要對(duì)一些文本文件建立索引,首先需要確定索引的數(shù)據(jù)源。對(duì)文本文件來(lái)說(shuō),數(shù)據(jù)源可以是文件名,文件的內(nèi)容,文件的最后修改時(shí)間等。對(duì)于每個(gè)不同的文件,這些數(shù)據(jù)源將提供出不同的內(nèi)容,以便將來(lái)存儲(chǔ)在索引中。在 Lucene 中,可以把一個(gè) Document 看作是這些不同內(nèi)容的集合,而“ 文件名”,“文件內(nèi)容”等名稱(chēng)可以看成是對(duì)不同數(shù)據(jù)源進(jìn)行分類(lèi)的標(biāo)記,在 Lucene 中我們把這些標(biāo)記稱(chēng)為 Field。 從根本上來(lái)講, Lucene 的 Document 代表了一個(gè)需要進(jìn)行索引的“單元”,任何需要進(jìn)行索引的“文件”都必須被轉(zhuǎn)化成 Document 對(duì)象才能夠被索引和搜索到。需要注意的是,此處在“文件”二字上加了引號(hào),這是因?yàn)椴⒎侵挥形募拍苻D(zhuǎn)化為 Document 類(lèi)型,任何數(shù)據(jù)源經(jīng)過(guò)組織都可以構(gòu)建一個(gè) Document 類(lèi)型。更進(jìn)一步說(shuō), Lucene 并不為任何實(shí)際物理文件建立索引,而只對(duì) Document對(duì)象建立索 引。所以,建立索引的第一步就是將不同的數(shù)據(jù)源組織為一個(gè) Document 類(lèi)型的對(duì)象。其實(shí),可以把 Document 對(duì)象看成一種虛擬的文件,它自身帶有多個(gè)數(shù)據(jù)源。從文件能夠提供數(shù)據(jù)源這個(gè)角度上來(lái)看, Document 對(duì)象與實(shí)際的物理文件基本相似,不同之處僅僅在于 Lucene 無(wú)法識(shí)別普通的物理文件而能識(shí)別一個(gè) Document 類(lèi)型的對(duì)象而已。 假設(shè)現(xiàn)在需要對(duì)一個(gè)網(wǎng)頁(yè)執(zhí)行建立索引的操作,以便在將來(lái)可以搜索到這個(gè)網(wǎng)頁(yè)的相關(guān)內(nèi)容,那么我們就需要先把這個(gè)網(wǎng)頁(yè)轉(zhuǎn)換成一個(gè) Document 對(duì)象。經(jīng)過(guò)分析可以知道,該網(wǎng)頁(yè)主要有幾個(gè)屬性 (也就是數(shù)據(jù)源)可能在將來(lái)檢索時(shí)會(huì)用到,分別是網(wǎng)頁(yè)的標(biāo)題,網(wǎng)頁(yè)的 URL,網(wǎng)頁(yè)的內(nèi)容和網(wǎng)頁(yè)的最后修改時(shí)間。因此,在為這網(wǎng)頁(yè)構(gòu)建 Document 對(duì)象時(shí)就應(yīng)當(dāng)包含這幾個(gè)不同的 Field。 基于 Lucene 的桌面全文搜索 引擎研究 11 Document 的基本使用方法:在 document()方法中首先構(gòu)造了一個(gè) Document 類(lèi)型的實(shí)例,然后依次往 Document 對(duì)象中添加了 path, modified 和 contents 3 個(gè) Field,這些 Field 在以后搜索時(shí)都將用到,最后返回生成的 Document 類(lèi)型的對(duì)象 doc。在對(duì) Document 添加 Field 時(shí),使用的 是 Document對(duì)象的 add( Field fld)方法,例如,在添加 path 信息到 doc 對(duì)象中時(shí),先通過(guò) ()方法獲取到了文件的路徑,再用 Field 類(lèi)自帶的靜態(tài)方法構(gòu)造出一個(gè) Field 實(shí)例,然后將其傳給 add 方法以完成添加。 字段( Field) 正如前面所述,字段( Field)是與文檔( Document)緊密相連的一個(gè)概念,在一個(gè) Document中,它代表了不同數(shù)據(jù)源的名稱(chēng)。然而,在現(xiàn)實(shí)中,數(shù)據(jù)源所提供的數(shù)據(jù)并不是以一種一成不變的方式進(jìn)行處理,對(duì)于不同的字段,人們所希望處 理的方式并不相同。 對(duì)于每個(gè) Field, Lucene 提供了 3 種方式以供用戶(hù)選擇進(jìn)行處理,這 3 種方式分別是被稱(chēng)為“是否切詞”,“是否索引”和“是否存儲(chǔ)“。從意義上我們并不難理解這 3 種方式。 a.“是否切詞” 表示在這個(gè) Field 中的數(shù)據(jù)是否需要被切詞。 b.“是否索引” 表示在這個(gè) Field 中的數(shù)據(jù)是否在將來(lái)檢索時(shí)需要被我們檢索到,一個(gè)“不索引”的 Field 通常僅提供輔助信息儲(chǔ)存的功能。 c.“是否存儲(chǔ)” 則表示該 Field 內(nèi)的信息是否要被原封不動(dòng)的保存在索引中。 Lucene 的 Field 類(lèi)提供的構(gòu)造方法支持 用戶(hù)構(gòu)造不同類(lèi)型的 Field,但更為常見(jiàn)的是使用 Field類(lèi)所提供的靜態(tài)方法來(lái)構(gòu)造所需要的字段。在 Field 中,通過(guò)靜態(tài)方法定義了 4 種不同類(lèi)型的字段Text、 Keyword、 UnIndexed 和 UnStored 可供使用,這 4 種字段在是否切詞、是否索引以及是否存儲(chǔ)等方面都有所不同,因此四種字段各有不同的用途。下面是詳細(xì)介紹: (1) Text Text 類(lèi)型的字段代表一段需要被切詞和索引的內(nèi)容,這也就說(shuō)明了這種類(lèi)型的字段可被搜索。但是,對(duì)于這個(gè)字段的大小一定要格外小心,因?yàn)?Text 類(lèi)型的字段有兩個(gè)不同的構(gòu) 造函數(shù): Field. Text( String, String)和 Field. Text( String, Reader)。 如果被索引的字段是 java 中的 String 類(lèi)型,那么它不僅會(huì)被索引,同時(shí)也會(huì)被存儲(chǔ)起來(lái),但如果是由 java 里面的 Reader 類(lèi)型來(lái)為該字段提供數(shù)據(jù)源,那么它就會(huì)被索引,而不會(huì)被存儲(chǔ)起來(lái)了。這一點(diǎn)在使用中往往引起一些混淆,因此在使用 Text 類(lèi)型的字段時(shí)一定要注意這些區(qū)別。通常, Field. Text( String, Reader)用在從某個(gè)文本流數(shù)據(jù)源中獲取數(shù)據(jù),數(shù)據(jù)量一般會(huì)比較大,而在將來(lái) 用戶(hù)可能并不需要重現(xiàn)它的內(nèi)容,僅是希望對(duì)其中的內(nèi)容做全文檢索,所以不需要去存儲(chǔ)數(shù)據(jù)源的內(nèi)容。但是希望存儲(chǔ)數(shù)據(jù)源的內(nèi)容,則只能先將其中的內(nèi)容取出來(lái)保存在一個(gè) String 中,再使用 Field. Text( String, String)來(lái)構(gòu)建需要的字段。 (2) Keyword Keyword(關(guān)鍵字)類(lèi)型的字段不會(huì)被切詞,但是會(huì)被索引并且完整的存儲(chǔ)在索引中。這種類(lèi)型的字段適合于連接地址 URLs、文件系統(tǒng)路徑信息、時(shí)間日期、人名、居民身份證號(hào)碼,電話號(hào)碼等。 基于 Lucene 的桌面全文搜索 引擎研究 12 例如,需要存儲(chǔ)一個(gè)文件的路徑名信息,因?yàn)槲募穆窂?名信息是不需要切分詞的(而且切分詞后反而失去了其意義),但是文件的路徑名信息是需要索引和存儲(chǔ)的,因此就可以把文件的路徑名信息存儲(chǔ)到 Keyword類(lèi)型的字段中。通常情況下,可以通過(guò) Field. Keyword( String fieldname, String Keyword)或 Field. Keyword( String fieldname, Data data)(專(zhuān)門(mén)針對(duì)日期型的關(guān)鍵字)這兩個(gè)靜態(tài)方法來(lái)構(gòu)造 Keyword 類(lèi)型的字段。 (3) UnIndexed UnIndexed 類(lèi)型的字段既不會(huì)被切詞,也 不會(huì)被索引,但是它的值還是會(huì)原封不動(dòng)的存儲(chǔ)在索引中。在 Field 中使用 Field. UnIndexed( String, String)靜態(tài)方法來(lái)構(gòu)建這種類(lèi)型的字段。這種類(lèi)型適合于處理需要和搜索結(jié)果顯示在一起的內(nèi)容,比如說(shuō)在一個(gè)網(wǎng)頁(yè)建立索引時(shí)可以將這個(gè)網(wǎng)頁(yè)的URL 引用地址添加到 UnIndexed 類(lèi)型的字段中。這樣在搜索到與這個(gè)網(wǎng)頁(yè)相關(guān)的內(nèi)容時(shí),就可以將這個(gè)引用地址與搜索結(jié)果一起顯示出來(lái)。 (4) UnStored Field 中通過(guò) Field. UnStored( String, String)方法來(lái)構(gòu)造一 個(gè) UnStored 類(lèi)型的字段。 UnStored類(lèi)型的字段與 UnIndexed 類(lèi)型的字段剛好相反,它會(huì)被切詞也會(huì)被索引,但是并不會(huì)被存儲(chǔ)在索引中。這種字段適合于索引那些并不需要以原有的形式來(lái)重視原始數(shù)據(jù)的大規(guī)模文本,比如網(wǎng)頁(yè)的主體部分或者是內(nèi)容龐大的文本文檔。 在表 中對(duì)不同類(lèi)型的字段進(jìn)行了比較,表格中包含各個(gè)字段的特性以及通常使用的例子。 字段類(lèi)型 /方法 是否被分詞 是否被索引 是否被存儲(chǔ) 用途 Field. Keyword( String name, String value) Field. Keyword( String, Data) 否 是 是 電話號(hào)碼、居民身份證號(hào)碼、人名、地名、日期 Field. UnIndexed ( String , String) 否 否 是 文檔的類(lèi)型,例如: Word、 PDF、Html Field. UnStored ( String , String) 是 是 否 文檔的標(biāo)題和內(nèi)容 Field. Text( String, String) 是 是 文檔的標(biāo)題和內(nèi)容 Field. Text( String, Reader) 是 是 否 文檔的內(nèi)容 表 不同字段類(lèi)型比 較、特性以及用途 當(dāng)使用 Field 類(lèi)所提供的靜態(tài)方法來(lái)構(gòu)造不同的字段時(shí),所有的字段類(lèi)型都有兩個(gè)構(gòu)造參數(shù),分別代表字段名和值,也就是我們?cè)谇懊嫣岬降摹版I /值”對(duì)。另外,正如表格中所列舉的, Keyword類(lèi)型的字段除了可以接受 String 類(lèi)型的參數(shù)作為字段值外,還可以接受 Data 類(lèi)型的參數(shù)作為字段值,而 Text 類(lèi)型的字段也可以接受 String 類(lèi)型或者 Data 類(lèi)型參數(shù)作為字段值。 假設(shè)現(xiàn)在需要對(duì)一個(gè)網(wǎng)頁(yè)建立索引,該網(wǎng)頁(yè)已經(jīng)被封裝為一個(gè) Page 類(lèi)型的對(duì)象。我們可以從這個(gè) Page 類(lèi)型的對(duì)象中得到的信息包括:網(wǎng)頁(yè)的標(biāo)題 、網(wǎng)頁(yè)的創(chuàng)建時(shí)間、網(wǎng)頁(yè)的 URL 地址和網(wǎng)頁(yè)的內(nèi)容信息。 基于 Lucene 的桌面全文搜索 引擎研究 13 Lucene 的索引部分是為 Lucene 的搜索部分服務(wù)的,因此與 Lucene 的搜索部分密切相關(guān),所以在建立索引時(shí)就應(yīng)該考慮到搜索時(shí)的操作,這樣才能夠建立起恰當(dāng)?shù)乃饕侄晤?lèi)型。而且關(guān)于 Lucene字段類(lèi)型的使用也并沒(méi)有統(tǒng)一的法則,每個(gè)人對(duì)如何使用各個(gè)字段類(lèi)型都會(huì)有不同的理解,所以要深刻理解并能夠靈活應(yīng)用各個(gè)字段類(lèi)型還需要在實(shí)際使用中逐漸積累經(jīng)驗(yàn)。 索引的添加 —— IndexWriter 類(lèi) IndexWriter 類(lèi)是 Lucene 中最重要的類(lèi)之一,它 的功能就是將文檔加入索引,同時(shí)控制索引過(guò)程中的各種參數(shù)。 初始化 IndexWriter 類(lèi)的初始化過(guò)程并不復(fù)雜,它本身提供了多種構(gòu)造函數(shù)??梢院芊奖愕貥?gòu)造一個(gè)IndexWriter 的對(duì)象。 通常情況下, IndexWriter 的構(gòu)造函數(shù)包括了以下 3 個(gè)參數(shù)。 IndexWriter 需要知道它要把索引創(chuàng)建在什么地方,因此,索引存放的路徑也就必不可少。這個(gè)路徑可以是一個(gè) String 型的目錄位置,也可以是經(jīng)過(guò)封裝的 對(duì)象,同時(shí),還可以是Lucene 自帶 的 Directory 類(lèi)型的對(duì)象。 前面說(shuō)過(guò),建立索引前首先要對(duì)文本進(jìn)行分析。因此,一個(gè)合適的分析器也就必不可少了。IndexWriter 的構(gòu)造函數(shù)中不可缺少的一項(xiàng)就是一個(gè)繼承字 Analyzer 類(lèi)的分析器。它的主要功能是在IndexWriter 將文檔寫(xiě)入索引前,把文本信息切分成一個(gè)個(gè)可以進(jìn)行索引的詞條。 IndexWriter 在建立索引時(shí),需要知道是重新建立索引,還是進(jìn)行增量的索引。通過(guò)指定一個(gè)布爾型的值,就可以完成這一任務(wù)。當(dāng)該布爾型的值為 ture 時(shí), IndexWriter 不管目錄內(nèi)是否已經(jīng)有索引了,一律清空,重新建立;而當(dāng)布爾型的值為 false 時(shí),則 IndexWriter 會(huì)在原有基礎(chǔ)上增量添加索引。 向索引添加文檔 在前面已經(jīng)了解了 Lucene 中的 Document 和 Field 的概念,同時(shí),也知道了 Lucene 是借助與IndexWriter 的幫助來(lái)向索引中添加數(shù)據(jù)的。接下來(lái),就來(lái)看看 IndexWriter 四如何把一個(gè)個(gè) Document對(duì)象加入索引中的。 首先創(chuàng)建 Document 對(duì)象,并分別為每個(gè)對(duì)象創(chuàng)建字段。然后,初始化一個(gè) IndexWriter 的對(duì)象,并確定 一個(gè)目錄作為索引的存放目錄,同時(shí)使用 StandardAnalyzer 作為其默認(rèn)的分析器,并且設(shè)置IndexWriter 清除原目錄內(nèi)的所有已有索引重新建立。接下來(lái),調(diào)用 IndexWriter 的 addDocument 方法來(lái)向索引中添加文檔。向索引中添加文檔相當(dāng)方便,只需要重復(fù)使用 IndexWriter 的 addDocument方法就可以完成一切建立索引的過(guò)程。 需要特別注意的是,當(dāng)執(zhí)行完 addDocument 方法后,千萬(wàn)不能忘記調(diào)用 IndexWriter 的 close 方法來(lái)關(guān)閉它。因此會(huì)發(fā)現(xiàn)索引目錄內(nèi)除了一個(gè) Segment 文件外什么都沒(méi)有。只有在調(diào)用了 close 方法后,索引器才會(huì)將存放于內(nèi)存中的所有內(nèi)容寫(xiě)入磁盤(pán)并關(guān)閉輸出流。 基于 Lucene 的桌面全文搜索 引擎研究 14 Lucene 的索引文件格式簡(jiǎn)述 Lucene 的索引有其固定的格式,下面就簡(jiǎn)單的進(jìn)行介紹。段( Segment) Segment 是 Lucene 索引文件中最基本的一個(gè)單位。一個(gè) Segment 是一個(gè)獨(dú)立的索引,可以由IndexSearcher 進(jìn)行單獨(dú)的查找。 Lucene 的工作其實(shí)就是不停地往磁盤(pán)中加入新的 Segment,然后再按一定的算法合并不同的
點(diǎn)擊復(fù)制文檔內(nèi)容
畢業(yè)設(shè)計(jì)相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1