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

正文內(nèi)容

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

2024-12-23 23:14 本頁面
 

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