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

正文內(nèi)容

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

2024-12-13 08:40 本頁面
 

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