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

正文內(nèi)容

基于lucene的站內(nèi)新聞搜索引擎的設(shè)計與實現(xiàn)(編輯修改稿)

2024-12-13 08:40 本頁面
 

【文章內(nèi)容簡介】 接搜索引擎的新時代 。 Lucene 簡介 最初 Lucene 是 Apache 軟件基金會 Jakarta 項目組 的 子項目,是一個完全開放源碼的全文檢索工具包。 Lucene的原作者是 Doug Cutting,他是一位資深全文檢索專家, VTwin搜索引擎的主要開發(fā)者。 2020年 3月 Doug Cutting把 Lucene轉(zhuǎn)移到 SourceFe上, 2020年 10月獻給 Apache基金會。 Lucene的取名來自 Doug Cutting的妻子的名字。 Lucene在最初階段是使用 java開發(fā)的。然后逐漸被翻譯成了多種語言,如 C++、 C、Perl等。同時 Lucene的各種應(yīng)用也開始發(fā)展起來,如 Nutch(一個 WebCrawler工具 )、 Hadoop(一個基于 Lucene的分布式計算平臺) 。它們的出現(xiàn)為 Lucene帶來了新鮮而且強大的動力。 目前 Lucene已經(jīng)發(fā)展到了 。但是由于新版本剛剛發(fā)布,穩(wěn)定性還不是很好, 基于 Lucene 的站內(nèi)新聞搜索引擎的設(shè)計與實現(xiàn) 第 2 頁 共 20 頁 本文還是按照成熟的 。 基于 Lucene 的站內(nèi)新聞搜索引擎的設(shè)計與實現(xiàn) 第 3 頁 共 20 頁 第二章 索引的建立 概述 我們首先已經(jīng)事先建立好了數(shù)據(jù)源,那么對于建立搜索引擎而言,第二步就是建立索引。索引的目的在于建立一個用戶目的信息,與數(shù)據(jù)源中一個單一數(shù)據(jù)的對應(yīng)。具體到文章來說就是需要找到用戶所搜索的詞與文章的關(guān)聯(lián)。 索引的建立主要涉及一下幾個問題,什么樣的數(shù)據(jù)要建立索引?以怎樣的方式建立索引? 什么樣的數(shù)據(jù)需要建立索引呢?這就要分析用戶需求了。現(xiàn)階段用戶往往輸入一段文字,然后希望找到與這段文字相關(guān)的信息。這段文字可以拆分成一個個的字,也可以拆分成一個個的詞。無論字詞,現(xiàn)在最后這都是我們獲取的用戶信息 ,我們要通過這個用戶信息查找到相應(yīng)的數(shù)據(jù),那么字詞便是需要建立索引的東西。與用戶有關(guān)的字詞,往往出現(xiàn)在文章的標題和文章的正文中,這便是我們需要建立索引的域。把這里邊的內(nèi)容拆成一個個的字詞,這些字詞就是我們要進行索引的數(shù)據(jù)。而且用戶需要搜索時間,我們就把時間整體索引,用戶需要搜索什么,我們就把什么做索引。 怎樣的方式去建立索引,決定了通過你的索引查找到相關(guān)文章的效率 ,索引的方式很多,我據(jù)一種簡單的方式,而后結(jié)合 Lucene在詳細的說明建立索引的方式。一種最簡單的建立索引的方式就是把字詞和一篇文章中出現(xiàn)過這個字 詞的文檔的編號存在一起。這樣,當搜索到這個字詞的時候,便能得到相應(yīng)的文檔編號,通過文檔編號,便可以獲取文檔的全部信息。 索引的建立是開發(fā)搜索引擎的關(guān)鍵一步,他關(guān)系著你的搜索引擎的搜索效率。 相關(guān)的技術(shù)綜述 倒排索引 倒排索引是 也常被稱為 反向索引 、 置入檔案 或 反向檔案 ,是一種 索引 方法,被用來 存儲 在 全文搜索 下某個單詞在一個文檔或者一組文檔中的 存儲位置 的 映射 。它是 文檔檢索系統(tǒng) 中最常用的 數(shù)據(jù)結(jié)構(gòu) 。 舉一個例子: 文本 T0=“我愛中華人民共和國” 文本 T1=“我愛中國” 文本 T2=“中華人民共和國很偉大” 那么反向文件索引為: “我”: 0, 1 “愛”: 0, 1 “中華 人民共和國”: 0, 2 “中國”: 1 “很”: 2 “偉大”: 2 這樣搜索“我”“中國”的結(jié)果就是 {0,1}∧ {1}={1} 基于 Lucene 的站內(nèi)新聞搜索引擎的設(shè)計與實現(xiàn) 第 4 頁 共 20 頁 中文分詞 中文分詞是索引建立的關(guān)鍵。因為中文博大精深,不像英語以空格完美分隔詞。同樣的一句話在不同的語境下意思不同,同樣連在一起兩個字,在某些情況下它們是一個詞,而有些情況下它們就是分別的字或者另一個詞的組成部分。例如我馬上到,我從馬上下來。兩個馬上很難區(qū)分。而且像“高高興興”這樣的疊詞,“去哪兒”這個兒化音詞,“吃了頓飯”這種分離詞都對使得分詞變得極其困難。 現(xiàn)在變簡單的介紹幾種分詞方式 。 按字索引 按字分詞可以解決所有的問題,使得搜索變的十分準確,因為字是漢字的最小單位,我們只要知道輸入的是什么字,字與字之間的位置關(guān)系便可以確定整個搜索內(nèi)容。但是按字分詞往往使得索引過大,并且用戶往往都是直接輸入連在一起的漢字,這樣便使得,按字拆分的方法不能很好的猜測用戶的意思。 中科院分詞 中科院分詞系統(tǒng)是目前使用很廣泛的系統(tǒng)。其最大的特點便是保留了大量的分詞組合結(jié)果,對于每一個結(jié)果,通過公司進行計算其相關(guān)性,從而從多個分詞結(jié)果中選出最合適的一個。另一個特點便是他的人名,地名識別系統(tǒng)。雖然在其開源版本上 不盡如人意,但是在其共享版的測試中效果還是非常好的。他的缺點是分詞數(shù)據(jù)并不是很快,而且開源版和共享版都有些問題。 優(yōu)點是分詞準確。 庖丁解牛 這個算法只有 Java 版本,其中的分詞算法效率很高,和 JavaCC 中的詞法分析算法有一些類似。這個分詞的缺點是有很多分詞不準,優(yōu)點是分詞速度很快。 盤古分詞 這個分詞的思想便是匹配,但是其中對于多字的詞,這個分詞軟件設(shè)置了很高的優(yōu)先級,使得分詞結(jié)果與我們實際想要的結(jié)果更加接近。這個分詞的優(yōu)點是完全開源,結(jié)構(gòu)清晰,方便在里邊修改源代碼,調(diào)整權(quán)重,并且有一套很好的詞典 管理工具。 缺點就是其內(nèi)置的詞典太過混亂,需要人工修改,并且分詞準確性不如中科院分詞。 Lucene 標準分詞 這個分詞是按照 JavaCC實現(xiàn)的。最后的結(jié)果是英文完美分詞,中文按字拆分。總的來說對英文應(yīng)用來說是完美的分詞。但是對中文分詞來說,效率上不夠。 Lucene 索引的建立 Lucene 索引相關(guān)類介紹 (1) Document Lucene 中的邏輯文件,每一個或多個物理文件與一個邏輯文件相對應(yīng)。Document邏輯文件便是 Lucene中數(shù)據(jù)源。 (2) Field 代表 Document的屬性。一個 Document由多個 Field組成。 Field有是否索引,是否儲存,是否分詞之分。 (3) Term 詞條,每個 Field中包含一個或多個詞條。 (4) IndexWriter 寫索引相關(guān)類 (5) IndexReader 基于 Lucene 的站內(nèi)新聞搜索引擎的設(shè)計與實現(xiàn) 第 5 頁 共 20 頁 讀索引相關(guān)類 Lucene 索引結(jié)構(gòu) (1) Segment 通常,一個 Segment 代表 Lucene 的一個完整索引段,一個索引中會包含多個Segment。 (2) .fnm 包含了 Document中所有 Field的名稱。 (3) .fdt 用于儲存 具有 Field數(shù)據(jù)。 (4) .fdx 用于儲存 Document在 .fdt中的位置。 (5) .tis 用于儲存分詞后的詞條。 (6) .tii 標明了每個 .tis文件中詞條的位置。 (7) Deletable 儲存了要刪除的文檔。 (8) .cfs 復(fù)合索引格式。 Lucene 索引過程 (1) 初始化 IndexWriter。 初始化分詞器,設(shè)置好文件路徑。 (2) 生成 Document。 把每個 Field添加到 Document,區(qū)分哪些是要保存的,哪些是要分詞的,哪些是要索引的。 (3) 寫索引。 把 Document信息寫人緩存,然后生成 Segment、 .fnm、 .fdt、 .fdx、 .tis、 .tii、Deletable文件,最后合并為 Segment、 .cfs、 Deletable三個索引文件。 (4) 索引的合并與優(yōu)化。 把多個 .cfs文件合并為一個,并刪除無用信息。 Lucene 索引的合并與優(yōu)化 索引的合并通過 mergeFactor、 maxMergeDocs、 minMergeDocs 因素控制,在批量建立索引時 mergeFactor去大值,在少量添加索引時 mergeFactor去小值。 索引的優(yōu)化通過 IndexWriter的 Optimize方法實現(xiàn)。把多個 Segment和 Deletable進行了合并。 Lucene 索引管理 Lucene的索引管理通過 IndexReader來實現(xiàn),通過這個類,我們可以通過 ID找到相應(yīng)的文檔,通過 ID 刪除文檔,對刪除的文檔進行恢復(fù)等操作。 索引的建立還是通過IndexWriter。 索引的同步則依靠 和 來實現(xiàn)。通過 IndexReader和 IndexWriter 這兩個類 就 可以很好的管理索引。在具體的項目中會介紹如何有效的管理索引。 基于 Lucene 的站內(nèi)新聞搜索引擎的設(shè)計與實現(xiàn) 第 6 頁 共 20 頁 第三章 搜索 概述 搜索是建立一個搜索引擎的第三步,也是根據(jù)需求確定內(nèi)核設(shè)計最煩瑣的一步。 我們在建立搜索是不僅要考慮搜索的 數(shù)量和范圍,更要定義相關(guān)的過濾器來過濾搜索結(jié)果,最后針對各種需求詳細設(shè)計自己的搜索邏輯。 就目前而言,用戶查看的往往只是搜索結(jié)果的前幾條。過多的搜索會造成不必要的時間浪費。如何建立緩存使得用戶快速查找,如何對最終結(jié)果進行估計,這些都顯得格外重要。 搜索結(jié)果的過濾是非常必要的,搜索結(jié)果包含敏感詞 ,用戶給出需求想要限制搜索結(jié)果的范圍,這些情況下都需要對搜索的結(jié)果進行過濾。 搜索邏輯是比較煩瑣的一塊,對于字詞的正則表達式的分析,各種域的限制,使得這一塊非常容易出錯。需要耐心的去修改,去完善。 Lucene 的搜索 Lucene 搜索相關(guān)類介紹 (1) IndexSearch 定義各種搜索的接口。 (2) Query 用于 查詢的 Lucene字詞類。 (3) Hits 儲存搜索結(jié)果的類型。 (4) QueryParse 把字詞生成查找對象。 Lucene 搜索過程 (1) 初始化 IndexSearch 選擇相應(yīng)的 Analysis分詞器。 (2) 初始化 Query 通過 QueryParse把 字詞轉(zhuǎn)化成一個 Query。 然后把各種產(chǎn)生的 Query合并在一起。 (3) 定義 Filter 初始化 Filter,確定過濾的范圍。 (4) 搜索 通過 IndexSearch的 Search方法,返回 Hits,得到結(jié)果。 Lucene 高級搜索 (1) TermQuery 這是最簡單的一種 Query, 包括詞條本身的內(nèi)容和詞條所在的 Field的信息。通過使用 TermQuery,你可以進行最簡單也是最原始的搜索。 (2) BooleanQuery 這是布爾搜索。通過 BooleanQuery,我們可以實現(xiàn)與、或、非的邏輯操作。 基于 Lucene 的站內(nèi)新聞搜索引擎的設(shè)計與實現(xiàn) 第 7 頁 共 20 頁 只需要在添加的時候指定這個值是必須出現(xiàn),必須不出現(xiàn)還是應(yīng)該出現(xiàn)。 (3) RangeQuery 這是范圍搜索。通過這個便可以搜索某個域中一定值范圍的數(shù)據(jù)。 (4) PrefixQuery 這是前綴搜索。通過這個便可以根據(jù)某種 前綴查找內(nèi)容了。 (5) PhraseQuery 這是短語搜索。通過這個便可以將短語作為一個整體進行搜索了。 (6) MultiPhraseQuery 這是多短語搜索。通
點擊復(fù)制文檔內(nèi)容
試題試卷相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1