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

正文內容

it計算機]基于lucene的桌面搜索引擎-閱讀頁

2024-12-07 23:14本頁面
  

【正文】 型的對象。 基于 Lucene 的桌面全文搜索 引擎研究 13 Lucene 的索引部分是為 Lucene 的搜索部分服務的,因此與 Lucene 的搜索部分密切相關,所以在建立索引時就應該考慮到搜索時的操作,這樣才能夠建立起恰當?shù)乃饕侄晤愋汀? 索引的添加 —— IndexWriter 類 IndexWriter 類是 Lucene 中最重要的類之一,它 的功能就是將文檔加入索引,同時控制索引過程中的各種參數(shù)。可以很方便地構造一個IndexWriter 的對象。 IndexWriter 需要知道它要把索引創(chuàng)建在什么地方,因此,索引存放的路徑也就必不可少。 前面說過,建立索引前首先要對文本進行分析。IndexWriter 的構造函數(shù)中不可缺少的一項就是一個繼承字 Analyzer 類的分析器。 IndexWriter 在建立索引時,需要知道是重新建立索引,還是進行增量的索引。當該布爾型的值為 ture 時, IndexWriter 不管目錄內是否已經有索引了,一律清空,重新建立;而當布爾型的值為 false 時,則 IndexWriter 會在原有基礎上增量添加索引。接下來,就來看看 IndexWriter 四如何把一個個 Document對象加入索引中的。然后,初始化一個 IndexWriter 的對象,并確定 一個目錄作為索引的存放目錄,同時使用 StandardAnalyzer 作為其默認的分析器,并且設置IndexWriter 清除原目錄內的所有已有索引重新建立。向索引中添加文檔相當方便,只需要重復使用 IndexWriter 的 addDocument方法就可以完成一切建立索引的過程。因此會發(fā)現(xiàn)索引目錄內除了一個 Segment 文件外什么都沒有。 基于 Lucene 的桌面全文搜索 引擎研究 14 Lucene 的索引文件格式簡述 Lucene 的索引有其固定的格式,下面就簡單的進行介紹。一個 Segment 是一個獨立的索引,可以由IndexSearcher 進行單獨的查找。 在每個目 錄下都有一個“ Segments”文件,該文件在每個目錄中有且僅有一個,而且它的文件名只能為“ Segments”。每個 Segment 的所有相關文件都有相同的前綴,這個前綴通常是用三十六進制表示的索引中包含文檔的數(shù)量。很顯然,只有將索引存放在磁盤上才是最佳方案。通常,在使用 FSDirectory 時, Lucene 會自動在內存中建立緩存,然后到一定時候就將索引寫入磁盤。 Lucene 的索引優(yōu)化 索引建立完以后,并不是原封不動地放置在文件系統(tǒng)中,而是需要對其進行適當?shù)膬?yōu)化。雖然可以通過控制各種各樣的 性能參數(shù)來改變磁盤上的 Segment 數(shù)量,但是,在索引建立完畢后,仍然可能存在大量未進行合并的 Segment。如果是在一個多線程的環(huán)境下,多個用戶同時打開這些索引進行檢索,那么服務器的效率更是會顯著的降低,所以,需要對索引進行優(yōu)化,以增加檢索速度。需要注意的是 optimize()方法并不會增加建索時的速度,反過來,它會降低建索的速度,而且由于在合并索引時,需要額外的磁盤空間來創(chuàng)建新的 Segment,因此它對磁盤空間的要求也會增加。這是因為在對索引進行優(yōu)化時,磁盤的 I/O 操作頻繁,如果太過頻繁的進行索引的優(yōu)化,會導致系統(tǒng)吞吐量大幅降低。本小節(jié)主要介紹使用 Lucene 進行檢索的流程。 初始化 IndexSearcher,需要設置索引存放的路徑,這樣才能讓查詢器定位索引,用于后面進行搜索。當然,初始化IndexSearcher 不止這一種方式。在 Lucene 中,它是一個很重要的概念,就是指對于需要查詢的字段采用什么樣的方式進行查詢,如模糊查詢、語義查詢、短語查詢、范圍查詢、組合查詢等。 在使用 Query 前,需要首先生成一個 Query 對象。這兩種方法在功能上是完全一樣的,只是后者在使用時更方便一些,而前者則更為靈活。 IndexSearcher提供了良好的檢索接口,用戶只需簡單地將 Query 對象傳入,就 可以得到一個返回結果。 搜索與結果 基于 Lucene 的桌面全文搜索 引擎研究 16 在本節(jié)將介紹如何使用 Lucene 進行索引的檢索。 檢索工具 —— IndexSearcher 類 Lucene 中使用 IndexSearcher 類來對索引進行檢索。前面說過,在初始化一個 IndexSearcher 類時最重要的就是要告訴它索引存放的路徑 ,只有這樣,檢索工具才可以定位索引,從而完成查找的任務。第一個方法最為簡單,它直接使用了索引存放的路徑作為參數(shù)來構造對象 。第三種是直接使用 IndexReader 來初始化一個 IndexSearcher 對象??梢钥闯?,實際上,無論傳入的參數(shù)類型是什么, IndexSearcher 最終都還是使用 IndexReader 來作為實際的索引目錄讀取器。 在初始化的工作完成之后,在進行搜索之前還需要構建一個 Query 對象。事實上,它關閉的并非 Searcher 對象本身,而是關閉 Searcher 對象內部所帶的 IndexReader 對象。在 Lucene 中搜索結果的集合是用 Hits 類的實例來進行表示的。 Hits 對象中主要有以下幾個經常使用的方法。 doc(int n):返回第 n 個文檔。 score(n):返回第 n 個文檔的得分。不過有一點值得注意,如果一個結果集含有 100000 條記錄,而 Hits 對象一次性就把檢索結果全部返回,那么這個 Hits 對象的結果就會大不一樣。 關于 Hits 對象的使用,在前面的章節(jié)中已經給出了許多例子,在建立完索引后,初始化一個IndexSearcher 來進行檢索。代碼在運行時,首先要求輸入要查詢的字符串,然后根據輸入的查詢字符串進行相應的檢索 。不過這里要注意一點,由于 Hits 對象被放入 session中,并不適合存入大量文本。 理解評分的概念 評分是搜索引擎中很重要的一個概念。對于檢索到的結果,需要按一定的順序返回給我們。 評分機制就是對檢索結果按某種標準進行評估,然后按分值的高低來對結果進行排序。例如某公司向搜索引擎繳納一定數(shù)量的費用,則該搜索引擎就將其搜索結果中關于該公司的部分公值加大,以便能在檢索結果返回給我們時讓該公司獲得更加靠前的位置。因此,評分機制從各方面來說都是相當重要的。 文檔的得分是在我們進行檢索時實時計算出來的。 因此,所有文檔的得分應當是都與我們輸入的關鍵字有關系,而且是實時運算的結果。 下面所示公式( )就是 Lucene 用于計算某個關鍵字在對應于某個文 檔的得分。在表 中詳細介紹了每一種因素對搜索結果評分的影響作用。通常情況下,倒排索引結構由“詞典”和“出現(xiàn)情況”兩部分組成。 如果 使用正常的索引結構,建立的是“文檔到單詞”的映射關系,在使用倒排索引技術后,建立的是“單詞到文檔”的映射關系,那么這兩種映射關系到底有何不同呢?它們各自有什么有缺點呢?下面舉例說明這兩種映射關系的差別。文檔 A 的內容是: This is a dog。 下面對這兩個文檔建立索引結構。 表 一般的索引格式示例 文檔編號 出現(xiàn)單詞 出 現(xiàn)次數(shù) 文檔編號 出現(xiàn)單詞 出現(xiàn)次數(shù) A dog 1 kind 1 B dog 1 animal 1 從中可以看出,一般的索引結構是以文檔為標準建立索引結構的,即它記錄的是一篇文檔中所有單詞出現(xiàn)的情況。然而,用戶在進行檢索時,都是輸入關鍵字進行查詢,如果使用這種索引結構,在查詢某一關鍵字時往往需要遍歷所有的索引,當索引量非常大時,效率會成為一個很大的問題。 從表 可以看出,倒排 索引是以單詞為標準建立的索引結構,它描述了一個單詞在所有文檔中的出現(xiàn)情況,比如說“ dog“在文檔 A 和文檔 B 中分別出現(xiàn)了一次,而單詞“ kind“只在文檔 B中出現(xiàn)了一次 39。因為在日常的檢索中,通常都是按照關鍵字進行 檢索的,所以,倒排索引可以更好地適合這種檢索機制的需要。 基于 Lucene 的桌面全文搜索 引擎研究 20 3 lucene 搜索引擎的中文分詞問題 所謂分詞,指的就是將一個完整的句子劃分為一個個詞條( Token)過程。只有通過這樣的方式,才能完成對一種語言的分析和檢索。由于搜索引擎與自然語言的理解,自動翻譯不同,在切分精度方面要求不是很嚴格,更注重切分速度 [19]。主要有單字切分,二分法。以這種方式切分出來的詞再進行索引,稱之為字索引。另外,當用戶對索引進行檢索時,如果用戶輸入 5 個字,則相當于要對索引進行 5 次 檢索,嚴重的影響效率。比如說查詢“上?!睍r,由于單子切分把“上海”切分成兩個詞:“上”和“?!保?這樣“海上”也可能被檢索出來。 所謂二分法,就是指每兩個字進行一次切分。這種切分方式完全不考慮詞義、語境、機械地對語句進行處理。根據這樣分詞效果建起來的索引會存有大量垃圾詞匯,有可能使用戶根本不可能檢索的詞。 詞庫分詞被認為是一種比較理想的中文分詞方式。例如詞庫中已經存在“天涯若比鄰”這個詞時,分詞器就會把它當作是一個詞條加入索引。通常,詞庫的建立需要統(tǒng)計大量的內容,然后根據各種詞出現(xiàn)的頻率、概率再來進行篩選,最終決定什么詞應當放入詞庫。 為了能夠使得分析器功能更加符合漢語習慣,并提高分詞的準確性,本文選擇采用前向最大匹配切分算法。 最大匹配切分算法中規(guī)定最長詞條長度 M。到切分詞典找查找該子串,如果不存在,則去除 子串中最后一位字符,將剩下的字符串作為子字符串,重復上面過程,直到在詞典中查找到子字符串或者子字符串長度變?yōu)?1,將子字符串作為詞,然后字符指針指向子字符串后面的第一位字符,繼續(xù)上面過程,直到字符串掃描結束。 詞典構造 基于 Lucene 的桌面全文搜索 引擎研究 21 分詞詞典是漢語自動分詞系統(tǒng)的一個基本組成部分,自動分詞系統(tǒng)所需的各類信息都要從分詞詞典中獲取,分詞詞典的查詢速度直接影響到分詞系統(tǒng)的速度。 其結構可分為:首字散列表和詞典正文兩部分。首字散列表為詞語的首個漢字,通過計算其散列值可以快速定位詞典正文的位置。 對于每個字符串,其散列值隨散列算法不同而不同, 由于 Lucene 中使用的是 UTF8 編碼,本文采用相應的散列算法。 由于在 java 中一字符由雙字節(jié)組成,每個漢字由 一個字符表示。這樣不僅減小詞典所占據的內存空間,同時提高了查詢字典的效率,從而提高整體查詢的速度。 Tokenizer 對字符串進行分析得到詞匯單元以及詞匯單元的位置信息,即一系列的 Token, 然后 Filter 對得到的Token 進行過 濾,最后由 Analyzer 提供接口。另外,因為本文實現(xiàn)基于詞典的中文分詞,所以提供了 WordLibService 類,來 實現(xiàn)關于詞典相關的功能。 MyTokenizer 主要完成分詞功能,分詞流程如圖 如下 。 MyTokenizer 從字符串中每次讀入一個字符,如果該字符是中文字符或者英文字母或數(shù)字時,將該字符加入緩存。重復以上過程,直到處理完字符串。 MyFilter 主要功能為過濾停用詞。根據中文語言的特點,本文實現(xiàn)的停 用詞列表中補充了“啊”,“阿”,“哎”,哎呀“,哎喲”,“俺們”等中文詞匯。 WordLibService 主要提供了三個功能:創(chuàng)建詞典、載入詞典、更新詞典。詞典中載入詞典:將儲存于本地磁盤文件凡序列化得到 HashMap 對象,即為以鍵值 對的形式的詞典,讀入內存。更新詞典:用戶 可以根據自己需要以每行一詞的格式添加自己的詞,更新詞典時,程序會先在詞典 中查找是否存在該詞,如果不存在則將該詞添加到詞典中。 SChinese 長度為 1? 在 詞 典 中 包 含SChinese? SEnglish 為空? Pointer Pointer Y Y N Y N Y Y Y N Y N Y N N 基于 Lucene 的桌面全文搜索 引擎研究 23 下面對 StandardAnalyzer 分詞器 和 MyAnalyzer 分詞器進行 比較 。顯然 MyAnalyzer 的分詞結果更符合漢語的習慣。該 搜索引擎可以為一些在本地硬盤上的部分文件建立索引,然后檢索這些文件。 這個搜索引擎系統(tǒng)默認了可以 對 doc 文件, txt 文件, HTML 文件,pdf 文件, ppt 文件等 10 種文件格式的索引和檢索 ,當然,可以修改 的內容來增加或修改所要檢索的文件格式。 當讀取索引時,只需要選擇已生產索引的目錄即可。 lucene 桌面搜索引擎系統(tǒng)使用的技術 Lucene 桌面 全文搜索引擎系統(tǒng)使用到了中文分詞技術 ,運用到 MyAnalyzer 分詞器 。 lucene 桌面搜索引擎系統(tǒng)分析 下面展示 lucene 桌面搜索引擎 系統(tǒng) 的流程圖 ,如圖 主要功能。但索引目錄中沒有記錄索引關鍵字的文件時,系統(tǒng)就會顯示一個空的結果。 lucene 桌面全文搜索引擎系統(tǒng)的設計 有了系統(tǒng)流程圖以后,對該系統(tǒng)的實現(xiàn)就有了一個明確的目標。用戶可以自定義索引目錄,可以是一個文件夾,可以是一個硬盤分區(qū),也可以是整個電腦硬盤。 圖 窗體 索引 界面 另外 一個功能是 搜索 的,如
點擊復制文檔內容
畢業(yè)設計相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1