亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于Lucene的全文檢索的研究及實(shí)現(xiàn)

        2018-06-02 08:50:48徐誠(chéng)皓
        電腦知識(shí)與技術(shù) 2018年10期
        關(guān)鍵詞:全文檢索

        徐誠(chéng)皓

        摘要:Lucene是一個(gè)基于Java 設(shè)計(jì)的,高效開源的全文索引引擎工具包。它簡(jiǎn)單卻足夠強(qiáng)大,可以嵌入到各種應(yīng)用中,實(shí)現(xiàn)針對(duì)全文的索引和多功能檢索。文章介紹分析了Lucene的系統(tǒng)結(jié)構(gòu)和實(shí)現(xiàn)機(jī)制,開發(fā)實(shí)現(xiàn)了一個(gè)基于Lucene的Web應(yīng)用。

        關(guān)鍵詞:全文檢索;Lucene;中文分詞;Web實(shí)現(xiàn)

        中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2018)10-0092-03

        Lucene是一個(gè)開源全文檢索工具包,它具有優(yōu)異的索引結(jié)構(gòu)和良好的系統(tǒng)架構(gòu),提供了靈活的API函數(shù)接口和可以定制的數(shù)據(jù)存儲(chǔ)結(jié)構(gòu),以實(shí)現(xiàn)具體的全文檢索功能。Lucene完全由Java JDK開發(fā)而成,沒(méi)有用到任何第三方開發(fā)包,因此,Lucene也具有良好的跨平臺(tái)特性。文章對(duì)Lucene進(jìn)行了研究和分析,以此為基礎(chǔ)設(shè)計(jì)實(shí)現(xiàn)了一個(gè)手機(jī)信息檢索的Web應(yīng)用。

        1 全文檢索引擎Lucene

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

        由于是基于Java設(shè)計(jì)的,Lucene也運(yùn)用了面向?qū)ο蟮脑O(shè)計(jì)思想,定義了一種使不同平臺(tái)間能夠兼容共享的索引文件格式,并通過(guò)抽象將系統(tǒng)的核心組成部分設(shè)計(jì)為抽象類,具體平臺(tái)的實(shí)現(xiàn)部分設(shè)計(jì)為實(shí)現(xiàn)類。此外,與平臺(tái)相關(guān)的部分例如文件存儲(chǔ)也封裝為類,并通過(guò)逐層處理,形成了一個(gè)低耦合、高效率、易擴(kuò)展的檢索引擎系統(tǒng)。

        Lucene 由基礎(chǔ)結(jié)構(gòu)封裝、索引核心、對(duì)外接口三大部分組成。系統(tǒng)結(jié)構(gòu)圖如圖1 所示。

        如圖1所示,Lucene包含七個(gè)組成結(jié)構(gòu):

        1. org.apache.lucene.analysis:語(yǔ)言分析器,主要用于分詞;

        2. org.apache.lucene.document:存儲(chǔ)索引的文檔結(jié)構(gòu),類似oracle中的表結(jié)構(gòu)

        3. org.apache.lucene.index:索引管理,主要包括建立,刪除等

        4. org.apache.lucene.search:檢索入口,根據(jù)查詢條件,檢索結(jié)果;

        5. org.apache.lucene.queryParser:查詢分析器,根據(jù)關(guān)鍵詞及其相互關(guān)系,提供自定義檢索;

        6. org.apache.lucene.store:數(shù)據(jù)存儲(chǔ)管理,主要包括底層I/O操作;

        7.org.apache.lucene.util:提供一些工具類。

        1.2 與關(guān)系型數(shù)據(jù)庫(kù)的對(duì)比

        一般來(lái)說(shuō),信息可分為結(jié)構(gòu)化信息和非結(jié)構(gòu)化信息。結(jié)構(gòu)化信息指的是具有固定格式和長(zhǎng)度的信息;而非結(jié)構(gòu)化信息指的是不定長(zhǎng),無(wú)格式的信息。現(xiàn)實(shí)生活中,大部分信息都是非結(jié)構(gòu)化的,比如HTML頁(yè)面,電子郵件等。

        關(guān)系型數(shù)據(jù)庫(kù),如oracle,它們?cè)谔幚斫Y(jié)構(gòu)化信息時(shí),有著高效快速的特點(diǎn)。但是在處理非結(jié)構(gòu)化信息時(shí),由于結(jié)構(gòu)模型等原因的限制,往往力不從心。而Lucene就能夠處理這些非結(jié)構(gòu)化信息,它通過(guò)將這些文本數(shù)據(jù)解析成中間格式,再進(jìn)行索引查詢。

        1.3 檢索實(shí)現(xiàn)機(jī)制

        Lucene中最基本的概念是索引(index), 文檔(document), 域(field)和項(xiàng)(term)。索引包含了文檔的序列, 文檔是域的序列, 域是項(xiàng)的序列, 項(xiàng)就是字符串。為了使得基于項(xiàng)的搜索更有效率, 索引中項(xiàng)是靜態(tài)存儲(chǔ)的。Lucene的索引屬于索引方式中的反向索引, 反向索引是一種以項(xiàng)為中心來(lái)組織文檔的方式,每個(gè)索引項(xiàng)指向一個(gè)文檔序列,這個(gè)序列中的文檔都包含該項(xiàng)。這正是Lucene所采用的反向索引機(jī)制。

        1.4 中文分詞

        分詞是文本挖掘的基礎(chǔ)與關(guān)鍵。由于Lucene自帶的分詞器對(duì)英文的分詞效果較好,但對(duì)中文的分詞效果并不如意。為了使檢索系統(tǒng)能更好的處理中文信息,本文采用了IKAnalyzer作為分詞器。IKAnalyzer是一個(gè)開源的,基于Java開發(fā)的輕量級(jí)的中文分詞工具包。它最初以Lucene為應(yīng)用主體的,3.0版本后獨(dú)立于Lucene,同時(shí)對(duì)Lucene提供優(yōu)化,是結(jié)合詞典分詞和文法分析算法的中文分詞組件。

        本文使用的IKAnalyzer2012FF_u1的特性:

        采用了特有的“正向迭代最細(xì)粒度切分算法“,支持細(xì)粒度和智能分詞兩種切分模式;

        具有160萬(wàn)字/秒(3000KB/S)的高速處理能力;

        智能分詞模式支持簡(jiǎn)單的分詞排歧義處理和數(shù)量詞合并輸出;

        采用了多子處理器分析模式,支持:英文字母、數(shù)字、中文詞匯等分詞處理,兼容韓文、日文字符;

        優(yōu)化了詞典存儲(chǔ),內(nèi)存占用更小;

        用戶詞典擴(kuò)展定義,支持中文,英文,數(shù)字混合詞語(yǔ)

        提供針對(duì)Lucene全文檢索優(yōu)化的查詢分析器IKQueryParser;

        采用歧義分析算法優(yōu)化查詢關(guān)鍵字的搜索排列組合,能極大的提高Lucene檢索的命中率。

        2手機(jī)信息檢索系統(tǒng)的實(shí)現(xiàn)

        本系統(tǒng)采用的是 MyEclipse10 + Struts2 + Tomcat6 的開發(fā)環(huán)境。

        2.1 構(gòu)建文本庫(kù)

        圖2的數(shù)據(jù)是從中關(guān)村手機(jī)頻道中整理的手機(jī)部分信息,包括廠商,型號(hào),處理器,系統(tǒng),內(nèi)存容量,屏幕尺寸,攝像頭最高像素,報(bào)價(jià),特點(diǎn)等,組成以TAB分隔的tsv文件。

        2.2 創(chuàng)建索引

        一般全文檢索有兩個(gè)過(guò)程,創(chuàng)建索引和搜索索引。由此可見,索引是全文檢索引擎中的關(guān)鍵,只有建立了索引才能進(jìn)行全文檢索。Lucene采用了Document邏輯文件和Field域來(lái)組織各種數(shù)據(jù)源。我們可以把Document邏輯文件想象成一個(gè)新聞HTML頁(yè)面,把URL,新聞標(biāo)題,作者,發(fā)布時(shí)間,正文等組成部分看做Field域,再根據(jù)屬性配置進(jìn)行相應(yīng)的處理,就能建立索引。

        索引過(guò)程如下:

        1)創(chuàng)建IKAnalyzer中文分詞器對(duì)象,用來(lái)從文本中提取出索引項(xiàng)。

        2)用IndexWriter類創(chuàng)建一個(gè)索引(index),并在之后能為索引添加文檔(document)。

        3)創(chuàng)建Document類的實(shí)例,代表我們要索引的文檔,它是由一個(gè)或多個(gè)域(field)組成。

        4)將不同的域加入到文檔中。比如,一篇文檔有多種信息,如題目,作者,修改時(shí)間,內(nèi)容等,都可以域用來(lái)表示。

        5)IndexWriter類對(duì)象調(diào)用函數(shù) addDocument 將索引寫到索引文件夾中。

        6)提交保存索引文件。

        下面是建立索引的關(guān)鍵代碼:

        // 創(chuàng)建分詞器

        analyzer = new IKAnalyzer(true);

        // 根據(jù)指定的路徑創(chuàng)建索引庫(kù),如果路徑不存在就會(huì)創(chuàng)建

        directory = FSDirectory.open(new File(INDEX_PATH));

        // 創(chuàng)建IndexWriter

        IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_40, analyzer);

        indexWriter = new IndexWriter(directory, config);

        for (File file : fileList) {

        // 讀取文件的內(nèi)容

        List content = file2String(file);

        // 創(chuàng)建Document對(duì)象

        for (int i = 0; i < content.size(); i++) {

        Document document = new Document();

        //Store配置field字段是否存儲(chǔ)到索引庫(kù)

        //YES:字段存儲(chǔ)到索引庫(kù)中

        //No:不存儲(chǔ)到索引庫(kù)中

        document.add(new TextField("contents", content.get(i), Store.YES));

        // 通過(guò)IndexWriter將文檔添加到索引中

        indexWriter.addDocument(document); }}

        // 提交索引

        indexWriter.commit();

        2.3 搜索索引

        Lucene建立了功能強(qiáng)大的索引機(jī)制為搜索服務(wù)。

        搜索過(guò)程如下:

        1)使用DirectoryReader將磁盤上的文件夾中索引文件信息讀入到內(nèi)存。

        2)使用IndexSearcher創(chuàng)建查詢對(duì)象,準(zhǔn)備進(jìn)行搜索。

        3)創(chuàng)建IKAnalyzer對(duì)象用來(lái)對(duì)查詢語(yǔ)句進(jìn)行中文詞法分析和語(yǔ)言處理。

        4)創(chuàng)建MultiFieldQueryParser對(duì)象用來(lái)對(duì)查詢語(yǔ)句進(jìn)行語(yǔ)法分析。

        5)調(diào)用MultiFieldQueryParser對(duì)象的parser方法進(jìn)行語(yǔ)法分析,形成查詢語(yǔ)法樹,放到Query對(duì)象中。

        6) 調(diào)用IndexSearcher對(duì)象的search方法,對(duì)查詢語(yǔ)法樹Query進(jìn)行搜索,得到查詢結(jié)果。

        下面是進(jìn)行搜索的關(guān)鍵代碼:

        //創(chuàng)建索引庫(kù)

        directory = FSDirectory.open(new File(INDEX_PATH));

        //創(chuàng)建分詞器

        analyzer = new IKAnalyzer(true);

        ireader = DirectoryReader.open(directory);

        //創(chuàng)建查詢對(duì)象

        IndexSearcher isearcher = new IndexSearcher(ireader);

        //要查找的關(guān)鍵字字符串?dāng)?shù)組

        String[] stringQuery= keywords;

        //Occur.MUST表示對(duì)應(yīng)字段必須有查詢值, Occur.MUST_NOT 表示對(duì)應(yīng)字段必須沒(méi)有查詢值

        String[] fields = new String[keywords.length];

        Occur[] occ = new Occur[keywords.length];

        //生成關(guān)鍵字與字段間的關(guān)系

        for (int i = 0; i < fields.length; i++) {

        fields[i] = "contents";

        occ[i] = Occur.MUST; }

        //查找

        Query query = MultiFieldQueryParser.parse(Version.LUCENE_40, stringQuery, fields, occ, analyzer);

        //返回查到的數(shù)據(jù)

        ScoreDoc[] hits = isearcher.search(query, 1000).scoreDocs;

        2.4 系統(tǒng)演示

        3結(jié)論

        Lucene全文檢索機(jī)制主要工作在搜索引擎的索引階段和檢索階段。文章對(duì)Lucene在這兩個(gè)階段的應(yīng)用做了初步的探討,實(shí)現(xiàn)了一個(gè)手機(jī)信息檢索系統(tǒng)的實(shí)例??梢钥闯觯琇ucene在搜索引擎領(lǐng)域的應(yīng)用有很大發(fā)展前景。

        參考文獻(xiàn):

        [1] 郎小偉,王申康.基于Lucene的全文檢索系統(tǒng)研究與開發(fā) [J].計(jì)算機(jī)工程,2006,32(4):94-99.

        [2] 管建和,甘劍峰.基于Lucene全文檢索引擎的應(yīng)用研究與實(shí)現(xiàn) [J].計(jì)算機(jī)工程與設(shè)計(jì),2007,28(2):489-491.

        [3] 向暉,郭一平,王亮. 基于Lucene的中文字典分詞模塊的設(shè)計(jì)與實(shí)現(xiàn)[J].現(xiàn)代圖書情報(bào)技術(shù),2006(8):46-50.

        [4] 朱小杰.Lucene教程[EB/OL].

        [2016-03-15].https://www.cnblogs.com/zhuxiaojie/p/5277219.html#autoid-5-1-0.

        [5] 徐寶文,張衛(wèi)豐.搜索引擎與信息獲取技術(shù) [M].北京:清華大學(xué)出版社,2003.

        [6] 車東. 在應(yīng)用中加入全文檢索功能—基于Java的全文索引引擎Lucene簡(jiǎn)介[EB/OL].

        [2009.03.20]http://www.chedong.com/tech/lucene.html.

        [7] 李剛,宋偉.征服Ajax+Lucene構(gòu)建搜索引擎 [M].北京:人民郵電出版社, 2006:220-245.

        [8] 文振威,秦曉.個(gè)性化搜索引擎的研究與設(shè)計(jì)[J].計(jì)算機(jī)工程與設(shè)計(jì),2009,30(2):342-344.

        猜你喜歡
        全文檢索
        企業(yè)網(wǎng)站靜態(tài)頁(yè)面生成與全文檢索技術(shù)研究
        實(shí)名制校園安保服務(wù)平臺(tái)的設(shè)計(jì)與實(shí)現(xiàn)
        基于MySQL的中文全文搜索研究
        基于Lucene全文檢索技術(shù)的優(yōu)化探討
        Oracle數(shù)據(jù)庫(kù)全文檢索性能研究
        全文檢索引擎Lucene系統(tǒng)模型與應(yīng)用研究
        全文檢索引擎技術(shù)在電子病歷中的應(yīng)用
        基于云計(jì)算的知識(shí)管理系統(tǒng)
        基于KySou的全文檢索系統(tǒng)的分析與優(yōu)化
        特色數(shù)據(jù)庫(kù)全文檢索系統(tǒng)的設(shè)計(jì)
        免费国产不卡在线观看| 久久精品国产亚洲av麻| 国产一在线精品一区在线观看| 久久这里有精品国产电影网| 女同国产日韩精品在线| 国产精品一区二区三区av在线| 九九九免费观看视频| 亚洲中文字幕久久无码精品| 女人夜夜春高潮爽a∨片| 日本精品视频一视频高清| 国产在线播放免费人成视频播放| 偷拍视频网址一区二区| 人妻少妇久久久久久97人妻| 四川老熟女下面又黑又肥| 毛片av在线播放亚洲av网站| 一区二区中文字幕蜜桃| 久久黄色国产精品一区视频| 正在播放强揉爆乳女教师| 国产精品高潮呻吟av久久4虎| 鲁丝一区鲁丝二区鲁丝三区| 亚洲天堂av在线免费播放| 亚洲国产精品高清一区| 亚洲一卡2卡3卡4卡5卡精品| 欧美黑人又粗又大久久久| 亚洲中文字幕有码av| 亚洲综合视频一区二区| 亚洲一区二区三区尿失禁| 成人激情五月天| 久久露脸国产精品WWW| 国产激情小视频在线观看的| 久久99热国产精品综合| 国产如狼似虎富婆找强壮黑人| 亚洲熟妇乱子伦在线| 手机在线观看亚洲av| 日韩有码中文字幕在线观看| 夜夜添夜夜添夜夜摸夜夜摸| 国产av成人精品播放| 日韩色久悠悠婷婷综合| 亚洲国产成人久久综合碰碰| 国产成本人片无码免费2020| 国产亚洲高清不卡在线观看|