国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于Lucene的多源數(shù)據(jù)全文檢索的研究與實(shí)現(xiàn)

2018-08-22 01:23:36邱敏明任洪敏顧利軍
現(xiàn)代計(jì)算機(jī) 2018年22期
關(guān)鍵詞:全文檢索數(shù)據(jù)源分詞

邱敏明,任洪敏,顧利軍

(上海海事大學(xué)信息工程學(xué)院,上海 201306)

0 引言

在當(dāng)今社會(huì),軟件開發(fā)的速度、規(guī)模都在快速提升,軟件開發(fā)過程中產(chǎn)生的文檔無論是文檔的存在格式還是存儲方式都存在著各種方式。在文檔的格式層面有.doc、.docx、.pdf等;在存儲方式層面,有存儲在本地磁盤的、MySQL數(shù)據(jù)庫、Git倉庫等幾種方。這些文檔就是檢索系統(tǒng)的數(shù)據(jù),文檔的存儲地方則是檢索系統(tǒng)的數(shù)據(jù)源。如何從多種數(shù)據(jù)源中快速有效地檢索到期望的數(shù)據(jù),這點(diǎn)在企業(yè)日常的開發(fā)中日益受到重視。

由于數(shù)據(jù)的多樣性,這里的多樣性不僅僅是數(shù)據(jù)之間的格式差異,也包括了不同數(shù)據(jù)的不同屬性,同時(shí)也還有數(shù)據(jù)存儲方式的差異性。所以對索引的創(chuàng)建提出了較為苛刻、復(fù)雜的要求?;贚ucene的全文檢索系統(tǒng),通過使用Lucene提供的接口,提出了利用XML配置文件的方式來降低數(shù)據(jù)多樣性帶來復(fù)雜度,同時(shí)通過配置文件來實(shí)現(xiàn)檢索的多樣性的方式。系統(tǒng)還針對如何保證檢索結(jié)果的準(zhǔn)確性和有效性的問題,提出了通過注冊監(jiān)聽服務(wù)的方式,來即時(shí)獲取數(shù)據(jù)的變化,再根據(jù)這些變化即時(shí)調(diào)整相關(guān)的索引,以此來保證索引的有效性。

1 系統(tǒng)模型

1.1 Lucene簡介

Lucene是一個(gè)高性能的Java全文檢索工具包而不是完整的全文檢索引擎,它提供了完整的查詢和索引引擎以及部分的文本分析引擎。

Lucene具有如下突出的優(yōu)點(diǎn):

(1)索引文件格式獨(dú)立于應(yīng)用平臺。

(2)它提供了一套強(qiáng)大的查詢引擎,Lucene的查詢實(shí)現(xiàn)中默認(rèn)實(shí)現(xiàn)了布爾查詢、模糊查詢等,開發(fā)人員可以使用這些查詢接口。

1.2 系統(tǒng)模型

基于Lucene的全文檢索系統(tǒng)將主要用于提供文檔的快速檢索,這些文檔的來源主要是本地的文件系統(tǒng)、MySQL數(shù)據(jù)庫以及Git倉庫。圖1展示了系統(tǒng)的主要結(jié)構(gòu)。

系統(tǒng)主要由四個(gè)部分構(gòu)成,一是數(shù)據(jù)獲取模塊、二是索引創(chuàng)建模塊、三是檢索模塊、四是數(shù)據(jù)展示模塊。該系統(tǒng)將作為一個(gè)獨(dú)立的檢索工具為用戶提供簡單有效的文檔檢索工具。

圖1 系統(tǒng)結(jié)構(gòu)

2 索引創(chuàng)建

2.1 Lucene及其索引文檔

首先需要了解需要用到的Lucene的索引。

●文檔(Document):文檔在索引和搜索的時(shí)候都會(huì)用到,是索引和搜索的基本單位(類似于關(guān)系數(shù)據(jù)庫關(guān)系表中的記錄),在搜索的時(shí)候根據(jù)這些內(nèi)容進(jìn)行匹配,找到的也是一個(gè)個(gè)匹配的文檔,然后再從文檔中找出需要的內(nèi)容,進(jìn)行還原。

●域(Field):域是文檔中真正用來匹配的東西,Lucene中文檔是由域構(gòu)成,每個(gè)域都有其名稱、類型和值。

●分析器(Analyzer)/詞元(Term):

分析器同樣是在索引和搜索的時(shí)候都需要用到,分析器是把原始文檔(或者用戶輸入)解析成一個(gè)個(gè)的詞語(稱為詞元),Lucene的索引就是一種倒排索引的結(jié)構(gòu),存儲的是從詞元到文檔的映射。原始文檔通過分析器轉(zhuǎn)換成詞元然后將詞元和文檔的映射關(guān)系存儲為索引,用戶搜索時(shí)分析器將用戶的輸入轉(zhuǎn)換為詞元然后到索引中去查找匹配的文檔。圖2是各個(gè)類型的文檔創(chuàng)建索引的過程,主要包括,讀取文檔、解析文檔、再將解析的文檔利用Lucene進(jìn)行索引創(chuàng)建。這個(gè)過程其實(shí)就是將普通的文檔轉(zhuǎn)換成Lucene能夠識別的文檔。

圖2 索引創(chuàng)建流程

2.2 索引模型設(shè)計(jì)

通過XML的Schema和Lucene的索引文檔格式的比較,為檢索系統(tǒng)設(shè)計(jì)了如下Schema模型:

圖3 XML Schema模型

這樣設(shè)計(jì)可以達(dá)到以下幾點(diǎn)效果:

(1)可以對文檔按所屬項(xiàng)目進(jìn)行分類,實(shí)現(xiàn)分類檢索;

(2)實(shí)現(xiàn)索引內(nèi)容的可配置化,降低對不同格式文檔創(chuàng)建索引時(shí)的復(fù)雜性;

(3)可以數(shù)據(jù)根據(jù)數(shù)據(jù)來源庫進(jìn)行分類,利于顯示數(shù)據(jù)來源;

(4)實(shí)現(xiàn)索引內(nèi)容的可配置化,靈活調(diào)整需要索引的庫、表、字段;

(5)實(shí)現(xiàn)數(shù)據(jù)讀取自動(dòng)化。

2.3 索引創(chuàng)建

在完成索引模型設(shè)計(jì)之后,通過調(diào)用Lucene提供的索引創(chuàng)建API,即可完成索引工作。在索引創(chuàng)建的過程中,有一步很重要的工作,那就是“分詞”。

分詞主要是將一段語句進(jìn)行切分,例如“我是一個(gè)學(xué)生。”這句話可以被切分成“我”、“是”、“一個(gè)”、“學(xué)生”這幾個(gè)詞。然后系統(tǒng)就將這幾個(gè)詞作為“Term”保存在索引文件中,因?yàn)長ucene索引文件中的最小單位是詞元(Term),在檢索的時(shí)候其實(shí)也是匹配詞元的。

基于Lucene的多源數(shù)據(jù)全文檢索系統(tǒng)采用的是IKAnalyzer這一分詞器,而并非是Lucene提供的Smart ChineseAnalyzer。圖4是兩個(gè)分詞器對于同一段語句的分詞結(jié)果。

可以看出Lucene自帶的Smart ChineseAnalyzer在切分語句中包含的英文單詞時(shí),英文單詞被切分后與原單詞出入較大,相比IKAnalyzer則沒有出現(xiàn)該問題,并且IKAanlyzer有著其他好處:

(1)IKAnalyzer可以設(shè)置切分粒,支持細(xì)粒度分詞;

(2)實(shí)現(xiàn)了Lucene的分詞接口的同時(shí)也支持獨(dú)立分詞系統(tǒng);

(3)可以配置自己的語境字典,策略很隨意。

3 索引數(shù)據(jù)的實(shí)時(shí)更新

索引文件的準(zhǔn)確性是保證檢索結(jié)果有效性的關(guān)鍵,在數(shù)據(jù)源中數(shù)據(jù)發(fā)生改變但未更新索引文件時(shí)就會(huì)導(dǎo)致檢索的結(jié)果不準(zhǔn)確。所以基于Lucene的全文檢索系統(tǒng)采用了數(shù)據(jù)訂閱與消費(fèi)組合的模式來處理增量數(shù)據(jù),以此來保證索引文件的有效性。

3.1 增量索引

在上一節(jié)中提到的索引創(chuàng)建過程,是用于系統(tǒng)初始化時(shí)創(chuàng)建索引的,這種方式稱之為全量索引。但在系統(tǒng)開始運(yùn)行后,若有新的文檔被添加到數(shù)據(jù)源或原有文檔數(shù)據(jù)在數(shù)據(jù)源中發(fā)生更改,為了保證用戶檢索結(jié)果的準(zhǔn)確性,必定需要更新原有的索引。如果還是采用全量索引的方式來更新,就會(huì)存在以下幾點(diǎn)缺點(diǎn):

(1)耗時(shí)長。創(chuàng)建索引所消耗的時(shí)間主要取決于帶索引數(shù)據(jù)的量,在大數(shù)據(jù)量的情況下,索引創(chuàng)建將消耗大量時(shí)間;

(2)檢索結(jié)果準(zhǔn)確性不受保證。若原有數(shù)據(jù)已發(fā)生改變,但全量索引還未完成,那么這時(shí)的檢索結(jié)果將會(huì)顯示數(shù)據(jù)未更新時(shí)的狀態(tài),那么檢索結(jié)果就不是正確的。

正是以上缺點(diǎn),基于Lucene的全文檢索系統(tǒng)采用增量索引的方式來更新索引。

增量索引,即,對新增的數(shù)據(jù)進(jìn)行索引。這里新增的數(shù)據(jù)并不僅僅只限于“Add”操作產(chǎn)生的數(shù)據(jù),同時(shí)也包含了“Update”和“Delete”操作帶來的數(shù)據(jù)變更。系統(tǒng)對些變化了的數(shù)據(jù)進(jìn)行索引更新處理,這樣就能保證檢索結(jié)果的正確性。由于這些數(shù)據(jù)變更操作主要是來源于其他應(yīng)用,同時(shí),該檢索系統(tǒng)是作為獨(dú)立的檢索工具來使用,要求對其他應(yīng)用的依賴性和侵入性有很好的控制,所以檢索系統(tǒng)采用了以下的模式來實(shí)現(xiàn)增量索引。

3.2 數(shù)據(jù)訂閱與消費(fèi)模式

數(shù)據(jù)訂閱與消費(fèi),分為數(shù)據(jù)訂閱和數(shù)據(jù)消費(fèi)兩個(gè)動(dòng)作。數(shù)據(jù)訂閱主要是用來捕捉變化的數(shù)據(jù),數(shù)據(jù)消費(fèi)是指將獲取到的變化了的數(shù)據(jù)進(jìn)行索引。這完成兩個(gè)步驟即可實(shí)現(xiàn)所需的增量索引。

(1)數(shù)據(jù)訂閱

對于本地文件系統(tǒng),系統(tǒng)采用Java Listener監(jiān)聽器的方式,對目標(biāo)目錄進(jìn)行監(jiān)測,當(dāng)有文件變動(dòng)時(shí)就會(huì)捕捉到變動(dòng)的文件以及具體的變動(dòng)形式。

對于MySQL數(shù)據(jù)庫,通過注冊監(jiān)聽服務(wù),并解析其二進(jìn)制文件的方式來獲取數(shù)據(jù)庫中的數(shù)據(jù)變更。

對于Git倉庫,利用Git Hooks可以及時(shí)得到倉庫內(nèi)文件的變更。當(dāng)有Git的提交操作時(shí),通過Hooks就能抓取到操作的內(nèi)容。

通過這三種方式就實(shí)現(xiàn)了對不同數(shù)據(jù)源的數(shù)據(jù)訂閱操作。通過訂閱數(shù)據(jù)的方式來實(shí)現(xiàn)增量索引可以在減少檢索系統(tǒng)對其他系統(tǒng)的侵入性和依賴性。

圖4 分詞結(jié)果圖

(2)數(shù)據(jù)消費(fèi)

數(shù)據(jù)消費(fèi)是指系統(tǒng)的索引服務(wù)將獲取到的增量的數(shù)據(jù)進(jìn)行轉(zhuǎn)化從原始的格式轉(zhuǎn)換成Lucene可識別的索引文件。這個(gè)過程亦可稱為增量更新。這樣保證了索引文件的準(zhǔn)確性,在一定程度上實(shí)現(xiàn)了索引的實(shí)時(shí)性,同時(shí)不會(huì)對原有的索引文件有太大變動(dòng),不會(huì)對整個(gè)系統(tǒng)的檢索的服務(wù)產(chǎn)生較大影響。圖5展示的是系統(tǒng)采用的數(shù)據(jù)訂閱與消費(fèi)模型。

圖5 數(shù)據(jù)訂閱與消費(fèi)模型

4 檢索及檢索結(jié)果

4.1 多樣化的檢索

基于Lucene的多源數(shù)據(jù)檢索系統(tǒng)提供了多種檢索方式有常見的模糊檢索也有精確檢索。迷糊檢索提供的是廣而全的檢索結(jié)果,精確檢索提供的是細(xì)而精的檢索結(jié)果。

(1)建立制造業(yè)企業(yè)分類目錄,推動(dòng)勞動(dòng)密集型制造業(yè)轉(zhuǎn)移、轉(zhuǎn)型或退出。政府應(yīng)順應(yīng)勞動(dòng)力成本上升的形勢,科學(xué)地建立制造業(yè)企業(yè)分類目錄,依據(jù)所建立的目錄推動(dòng)勞動(dòng)密集型制造業(yè)轉(zhuǎn)移、轉(zhuǎn)型或退出,改變制造業(yè)企業(yè)的“粗放型”發(fā)展方式,引導(dǎo)制造業(yè)結(jié)構(gòu)優(yōu)化。

(1)模糊檢索

模糊檢索是檢索系統(tǒng)最基本的檢索功能,系統(tǒng)會(huì)將獲取到的待檢索內(nèi)容在系統(tǒng)的三個(gè)數(shù)據(jù)源的索引文件中進(jìn)行檢索,這樣的模糊檢索就類似于SQL語句中用“l(fā)ike”關(guān)鍵詞一樣,只要包含了搜索關(guān)鍵字的數(shù)據(jù),都被檢索出來。

(2)精確檢索

基于Lucene的多源數(shù)據(jù)檢索系統(tǒng)也提供了精確檢索的功能。由于檢索粒度相較模糊檢索會(huì)小很多,所以檢索結(jié)果的量也會(huì)小很多,主要是針對精細(xì)化檢索。

4.2 檢索的實(shí)現(xiàn)

檢索總的來說其實(shí)就是從Lucene的索引文件中搜索的與關(guān)鍵字匹配索引記錄的操作,但這一步操作可以細(xì)分成多個(gè)步驟。

第一步是將檢索內(nèi)容進(jìn)行分詞,這一步也是整個(gè)檢索的關(guān)鍵一步,目的是將長句進(jìn)行切分,以此獲得Lucene索引的最小單位“Term”,然后再按最小單位保存在索引文件中。所以檢索時(shí)也需要用相同的分詞器將頁面輸入的待檢索值進(jìn)行分詞,如果不是用相同的分詞器,對相同內(nèi)容的切分結(jié)果或許會(huì)有不同,那么就會(huì)導(dǎo)致待檢索內(nèi)容和索引文件里面的關(guān)鍵字不匹配,這樣就導(dǎo)致了檢索結(jié)果不正確,所以必須使用和創(chuàng)建索引時(shí)相同的分詞器。

第二步是將經(jīng)過處理的檢索內(nèi)容和現(xiàn)有的索引文檔進(jìn)行比較得到與檢索內(nèi)容相關(guān)的索引文檔。

第三步是將獲得的索引文檔按照相關(guān)度進(jìn)行打分。在給索引文檔打分的過程涉及到一個(gè)很重要的步驟,那就是計(jì)算權(quán)重(Term weight)。計(jì)算權(quán)重是指找出詞(Term)對文檔的重要性的過程稱。影響一個(gè)詞(Term)在一篇文檔中的重要性主要有兩個(gè)因素:

(1)Term Frequency(TF):即此 Term 在此文檔中出現(xiàn)了多少次。TF越大說明越重要。

(2)Document Frequency(DF):即有多少文檔包含次Term。DF越大說明越不重要。

如果詞(Term)在文檔中出現(xiàn)的次數(shù)越多,說明此詞(Term)對該文檔越重要,如“搜索”這個(gè)詞,在本文檔中出現(xiàn)的次數(shù)很多,說明本文檔主要就是講這方面的事的。然而在一篇英語文檔中,this出現(xiàn)的次數(shù)更多,就說明越重要嗎?不是的,這是由第二個(gè)因素進(jìn)行調(diào)整,第二個(gè)因素說明,有越多的文檔包含此詞(Term),說明此詞(Term)太普通,不足以區(qū)分這些文檔,因而重要性越低。Lucene就根據(jù)這兩個(gè)因素,設(shè)計(jì)了給索引得到的文檔進(jìn)行打分的計(jì)算公式:

其中 queryNorm(q):queryNorm(q)是查詢權(quán)重對得分的影響,這個(gè)因素對所有文檔都是一樣的值,所以它不影響排序結(jié)果;

tf(t in d):即term t在文檔d中出現(xiàn)的個(gè)數(shù);

idf(t):關(guān)聯(lián)到反轉(zhuǎn)文檔頻率,文檔頻率指出現(xiàn)term t的文檔數(shù)docFreq。docFreq越少idf就越高(物以稀為貴),但在同一個(gè)查詢下些值是相同的;

boost(t):查詢時(shí)期term的加權(quán),這個(gè)就是一個(gè)影響值;

norm(t,d):這個(gè)項(xiàng)是長度的加權(quán)因子,目的是為了將同樣匹配的文檔,比較短的放比較前面。

最后按照文檔得分進(jìn)行排序,得到了索引結(jié)果順序。圖6為系統(tǒng)運(yùn)行結(jié)果圖,搜索包含“上海海事lucene”的文檔,最終搜索結(jié)果如圖6所示。

在檢索服務(wù)剛啟動(dòng)時(shí),由于不可避免的文件的I/O操作導(dǎo)致了耗時(shí)增加到500毫秒左右,但再進(jìn)行檢索時(shí),檢索耗時(shí)可降低到100毫秒左右,整個(gè)的效率還是很可觀的。

5 結(jié)語

基于Lucene的多源數(shù)據(jù)檢索系統(tǒng)提供了快捷方便的文檔檢索操作,提供了多樣化的檢索方式。同時(shí)由于采用可配置劃的方式來實(shí)現(xiàn)索引創(chuàng)建工作,使得整個(gè)系統(tǒng)更加方便,且易維護(hù),而且實(shí)現(xiàn)了對于第三方程序最低程度的依賴和侵入性,實(shí)現(xiàn)了較高的獨(dú)立性。

圖6

猜你喜歡
全文檢索數(shù)據(jù)源分詞
結(jié)巴分詞在詞云中的應(yīng)用
Web 大數(shù)據(jù)系統(tǒng)數(shù)據(jù)源選擇*
基于不同網(wǎng)絡(luò)數(shù)據(jù)源的期刊評價(jià)研究
值得重視的分詞的特殊用法
Oracle數(shù)據(jù)庫全文檢索性能研究
基于真值發(fā)現(xiàn)的沖突數(shù)據(jù)源質(zhì)量評價(jià)算法
基于KySou的全文檢索系統(tǒng)的分析與優(yōu)化
分布式異構(gòu)數(shù)據(jù)源標(biāo)準(zhǔn)化查詢設(shè)計(jì)與實(shí)現(xiàn)
特色數(shù)據(jù)庫全文檢索系統(tǒng)的設(shè)計(jì)
高考分詞作狀語考點(diǎn)歸納與疑難解析
奉贤区| 象州县| 北海市| 木里| 诏安县| 仙居县| 梨树县| 镇坪县| 白朗县| 长乐市| 外汇| 湟中县| 南丰县| 尖扎县| 长兴县| 平塘县| 洪洞县| 高密市| 额敏县| 白山市| 罗山县| 永昌县| 鸡西市| 奉节县| 百色市| 防城港市| 西藏| 若羌县| 大埔区| 富源县| 百色市| 德化县| 五大连池市| 新民市| 资阳市| 嵊州市| 百色市| 金门县| 宣恩县| 洪江市| 石渠县|