欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Lucene實(shí)現(xiàn)索引和查詢的實(shí)例講解

 更新時(shí)間:2017年12月23日 09:05:47   作者:皂雨霏霏  
下面小編就為大家分享一篇Lucene實(shí)現(xiàn)索引和查詢的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

0引言

隨著萬(wàn)維網(wǎng)的發(fā)展和大數(shù)據(jù)時(shí)代的到來(lái),每天都有大量的數(shù)字化信息在生產(chǎn)、存儲(chǔ)、傳遞和轉(zhuǎn)化,如何從大量的信息中以一定的方式找到滿足自己需求的信息,使之有序化并加以利用成為一大難題。全文檢索技術(shù)是現(xiàn)如今最普遍的信息查詢應(yīng)用,生活中利用搜索引擎,在博客論壇中查找信息,這些搜索的核心原理就是本文要實(shí)現(xiàn)的全文檢索技術(shù)。隨著文檔信息數(shù)字化的實(shí)現(xiàn),將信息有效存儲(chǔ)并及時(shí)準(zhǔn)確的提取是每一個(gè)公司、企業(yè)和單位要做好的基礎(chǔ)。針對(duì)英文的全文檢索已經(jīng)有很多成熟的理論和方法,開(kāi)放源代碼的全文檢索引擎Lucene 是Apache 軟件基金會(huì)Jakarta 項(xiàng)目組的一個(gè)子項(xiàng)目,它的目的是為軟件開(kāi)發(fā)人員提供一個(gè)簡(jiǎn)單易用的工具包,方便在目標(biāo)系統(tǒng)中實(shí)現(xiàn)全文檢索的功能。Lucene不支持中文,但是目前已有很多開(kāi)源的中文分詞器可以對(duì)中文內(nèi)容進(jìn)行索引,本文在研究Lucene核心原理的基礎(chǔ)上,分別實(shí)現(xiàn)了對(duì)中英文網(wǎng)頁(yè)的爬取和檢索。

1 Lucene介紹

1.1 lucene簡(jiǎn)介

Lucene是一個(gè)用Java寫的全文檢索引擎工具包,實(shí)現(xiàn)構(gòu)造了索引和搜索兩大核心功能,并且兩者相互獨(dú)立,這使得開(kāi)發(fā)人員可以方便擴(kuò)展,Lucene提供了豐富的API , 可以與存儲(chǔ)在索引中的信息方便的交互。需要說(shuō)明的是它并不是一個(gè)完整的全文檢索應(yīng)用, 而是為應(yīng)用程序提供索引和搜索功能。即若想讓Lucene 真正起作用, 還需在其基礎(chǔ)上做一些必要的二次開(kāi)發(fā)。

Lucene的結(jié)構(gòu)設(shè)計(jì)與數(shù)據(jù)庫(kù)的設(shè)計(jì)較為相似,但Lucene的索引與數(shù)據(jù)庫(kù)有著極大的不同。數(shù)據(jù)庫(kù)和Lucene建立索引都是為了查找方便,但是數(shù)據(jù)庫(kù)僅僅針對(duì)部分字段進(jìn)行建立,且需要把數(shù)據(jù)轉(zhuǎn)化為格式化信息,并予以保存。而全文檢索是將全部信息按照一定方式進(jìn)行索引。兩種檢索的不同和相似如表1-1所示。

表1-1:數(shù)據(jù)庫(kù)檢索與Lucene檢索對(duì)比

比較項(xiàng)

Lucene檢索

數(shù)據(jù)庫(kù)檢索

數(shù)據(jù)檢索

從Lucene的索引文件中檢出

由數(shù)據(jù)庫(kù)索引檢索記錄

索引結(jié)構(gòu)

Document(文檔)

Record(記錄)

查詢結(jié)果

Hit:滿足關(guān)系的文檔組成

查詢結(jié)果集:包含關(guān)鍵字的記錄組成

全文檢索

支持

不支持

模糊查詢

支持

不支持

結(jié)果排序

設(shè)置權(quán)重,進(jìn)行相關(guān)性排序

不能排序

1.2 lucene總體結(jié)構(gòu)

Lucene軟件包的發(fā)布形式是一個(gè)JAR文件,版本更新較快且版本差距較大,本文使用的是5.3.1的版本,主要使用的子包如表1-2所示。

表1-2:子包和功能

包名

功能

Org .apache.lucene .analysis

分詞

Org .apache.lucene .document

對(duì)索引管理的文檔

Org .apache.lucene .index

索引操作,包括增加、刪除等

Org .apache.lucene .queryParser

查詢器,構(gòu)造檢索表達(dá)式

Org .apache.lucene .search

檢索管理

Org .apache.lucene .store

數(shù)據(jù)存儲(chǔ)管理

Org .apache.lucene .util

公共類

1.3 lucene架構(gòu)設(shè)計(jì)

Lucene功能非常強(qiáng)大,但從根本上來(lái)說(shuō),主要包括兩塊:一是從文本內(nèi)容切分詞后索引入庫(kù);二是根據(jù)查詢條件返回結(jié)果,即建立索引和進(jìn)行查詢兩部分。

如圖1-1所示,本文拋出外部接口以及信息來(lái)源,重點(diǎn)對(duì)網(wǎng)頁(yè)爬取的文本內(nèi)容進(jìn)行索引和查詢 。

圖1-1:Lucene的架構(gòu)設(shè)計(jì)

2 JDK的安裝和環(huán)境變量的配置

1.jdk的下載:

在oracle官網(wǎng)下載符合系統(tǒng)版本的壓縮包,網(wǎng)址如下。點(diǎn)擊安裝,根據(jù)提示進(jìn)行安裝,在安裝過(guò)程中會(huì)提示是否安裝jre,點(diǎn)擊是。

http://www.oracle.com/technetwork/java/javase/downloads/index.html

2.設(shè)置環(huán)境變量:

(1)右鍵計(jì)算機(jī)=》屬性=》高級(jí)系統(tǒng)設(shè)置=》環(huán)境變量=》系統(tǒng)變量=》新建=》JAVA_HOME:安裝路徑

(2)Path中新增=》%JAVA_HOME%\bin

3.測(cè)試是否成功:

開(kāi)始=》運(yùn)行=》CMD 回車 在彈出的 DOS 窗口內(nèi)

輸入:java -version 會(huì)出現(xiàn)版本信息,

輸入: javac出現(xiàn) javac 的用法信息

出現(xiàn)如圖2-1所示為成功。

圖2-1:cmd命令框測(cè)試java配置

3 編寫Java代碼實(shí)現(xiàn)對(duì)網(wǎng)頁(yè)內(nèi)容的獲取

因?yàn)長(zhǎng)ucene針對(duì)不同語(yǔ)言要使用不同的分詞器,英文使用標(biāo)準(zhǔn)分詞器,中文選擇使用smartcn分詞器。在獲取網(wǎng)頁(yè)的時(shí)候,先獲取網(wǎng)頁(yè)存為html文件,在html中由于標(biāo)簽  的干擾,會(huì)對(duì)檢索效果產(chǎn)生影響,因此需要對(duì)html標(biāo)簽進(jìn)行剔除,并將文本內(nèi)容轉(zhuǎn)為txt文件進(jìn)行保存。中英文除了分詞器不同,其他基本一致,因此之后的代碼和實(shí)驗(yàn)結(jié)果演 示會(huì)選擇任一。本文選取五十篇中文故事和英文故事的網(wǎng)頁(yè)為例。

具體代碼設(shè)計(jì)如下圖:Url2Html.java將輸入網(wǎng)址的網(wǎng)頁(yè)轉(zhuǎn)存為html文件,Html2Txt.java文件實(shí)現(xiàn)html文檔標(biāo)簽的去除,轉(zhuǎn)存為txt文檔。具體代碼如圖3-1和3-2。

public void way(String filePath,String url) throws Exception{
 File dest = new File(filePath);//建立文件
 InputStream is;//接收字節(jié)輸入流
 FileOutputStream fos = new FileOutputStream(dest);//字節(jié)輸出流
 URL wangzhi = new URL(url);//設(shè)定網(wǎng)址URL
 is = wangzhi.openStream();
 BufferedInputStream bis = new BufferedInputStream(is);//為字節(jié)輸入流加緩沖
 BufferedOutputStream bos = new BufferedOutputStream(fos);//為字節(jié)輸出流加緩沖
 /*
  * 對(duì)字節(jié)進(jìn)行讀取
  */
 int length;
 byte[] bytes = new byte[1024*20];
 while((length = bis.read(bytes, 0, bytes.length)) != -1){
  fos.write(bytes, 0, length);
 }
 /*
  * 關(guān)閉緩沖流和輸入輸出流
  */
 bos.close(); 
 fos.close();
 bis.close();
 is.close();
 }
public String getBody(String val){
		  String zyf = val.replaceAll("</?[^>]+>", ""); //剔出<html>的標(biāo)簽
		  return zyf;
	}
	
	public void writeTxt(String Str,String writePath) {
		  File writename = new File(writePath);
		  try {
			    writename.createNewFile();
			    BufferedWriter out = new BufferedWriter(new FileWriter(writename));
			    out.write(Str);
			    out.flush();
			    out.close();
		  } catch (IOException e) {
			    e.printStackTrace();
		  }
	}

以童話故事《笨狼上學(xué)》的網(wǎng)頁(yè)為例,文檔路徑設(shè)為”E:\work \lucene \test \data \html”和”E:\work\lucene\test\data\txt”,在每一次讀取網(wǎng)頁(yè)的時(shí)候需要設(shè)定的兩個(gè)參數(shù)為文件命名filename和獲取目標(biāo)網(wǎng)址url。新建一個(gè)main函數(shù),實(shí)現(xiàn)對(duì)兩個(gè)方法的調(diào)用。具體實(shí)現(xiàn)如圖3-3所示:

public static void main(String[] args) {
		    String filename = "jingdizhi";//文件名字
		    String url = "http://www.51test.net/show/8072125.html";//需要爬取的網(wǎng)頁(yè)url
		    String filePath = "E:\\work\\lucene\\test\\data\\html\\"+filename+".html";//寫出html的文件路徑+文件名
		    String writePath = "E:\\work\\lucene\\test\\data\\txt\\"+filename+".txt";//寫出txt的文件路徑+文件名
		
		    Url2Html url2html = new Url2Html();
		    try {
			      url2html.way(filePath,url);
		    } catch (Exception e) {
			      e.printStackTrace();
		    }
		
		    Html2Txt html2txt = new Html2Txt();
		    String read=html2txt.readfile(filePath);//讀取html文件
		    String txt = html2txt.getBody(read);//去除html標(biāo)簽
		    System.out.println(txt);
		    try {
			      html2txt.writeTxt(txt,writePath);
		    } catch (Exception e) {
			      e.printStackTrace();
		    }
	  }

執(zhí)行程序后,分別在兩個(gè)文件夾中建立”笨狼上學(xué).html”和”笨狼上學(xué).txt”。

4 建立索引

索引和查詢的基本原理如下:

建立索引:搜索引擎的索引其實(shí)就是實(shí)現(xiàn)“單詞-文檔矩陣”的具體數(shù)據(jù)結(jié)構(gòu)。也是進(jìn)行全文檢索的第一步,lucene提供IndexWriter類進(jìn)行索引的管理,主要包括add()、delete()、update()。還有對(duì)權(quán)值的設(shè)定,通過(guò)不同索引權(quán)值的設(shè)定,可以在搜索的時(shí)候根據(jù)相關(guān)性大小進(jìn)行返回。

進(jìn)行搜索:原本的直接搜索是針對(duì)文檔進(jìn)行順序檢索,在建立索引之后,可以通過(guò)對(duì)索引的查找以找到索引詞在文檔中出現(xiàn)的位置,然后返回索引項(xiàng)所對(duì)的文檔中的位置和詞。Lucene提供IndexSearcher類進(jìn)行對(duì)文檔的檢索,檢索形式主要分為兩類,第一類是Term,針對(duì)單個(gè)詞項(xiàng)的檢索;第二類是Parser,可以自定義構(gòu)造檢索表達(dá)式,有較多的檢索形式,具體的方法會(huì)在之后進(jìn)行實(shí)現(xiàn)的演示。

4.1 實(shí)驗(yàn)環(huán)境

本PC機(jī)采用windows 10x64系統(tǒng),8G內(nèi)存,256G固態(tài)硬盤。開(kāi)發(fā)環(huán)境為Myeclipse 10,jdk版本為1.8。在實(shí)驗(yàn)過(guò)程中,因?yàn)椴糠终Z(yǔ)法的轉(zhuǎn)變,若干Class采用1.6版本實(shí)現(xiàn)。

4.2 建立索引

建立索引庫(kù)就是往索引庫(kù)添加一條條索引記錄,Lucene為添加一條索引記錄提供了接口,添加索引。

主要用到了“寫索引器”、“文檔”、“域”這3 個(gè)類。要建立索引,首先要構(gòu)造一個(gè)Document 文檔對(duì)象,確定Document的各個(gè)域,這類似于關(guān)系型數(shù)據(jù)庫(kù)中表結(jié)構(gòu)的建立,Document相當(dāng)于表中的一個(gè)記錄行,域相當(dāng)于一行中的列,在Lucene 中針對(duì)不同域的屬性和數(shù)據(jù)輸出的需求,對(duì)域還可以選擇不同的索引/存儲(chǔ)字段規(guī)則,在本實(shí)驗(yàn)中,文件名fileName、文件路徑fullPath和文本內(nèi)容content作為Document 的域。

IndexWriter 負(fù)責(zé)接收新加入的文檔,并寫入索引庫(kù)中。在創(chuàng)建“寫索引器”IndexWriter 時(shí)需要指定所使用的語(yǔ)言分析器。建立索引分為兩個(gè)類別,第一:不加權(quán)索引;第二:加權(quán)索引。

public Indexer(String indexDir)throws Exception{
 Directory dir=FSDirectory.open(Paths.get(indexDir));
 Analyzer analyzer=new StandardAnalyzer(); // 標(biāo)準(zhǔn)分詞器
 //SmartChineseAnalyzer analyzer = new SmartChineseAnalyzer();
 IndexWriterConfig iwc=new IndexWriterConfig(analyzer);
 writer=new IndexWriter(dir, iwc);
 }

設(shè)置索引字段,Store表示是否對(duì)索引內(nèi)容存儲(chǔ):fileName和fullPath占用內(nèi)存較少可以進(jìn)行存儲(chǔ),以方便查詢返回。

private Document getDocument(File f)throws Exception {
 Document doc=new Document();
 doc.add(new TextField("contents", new FileReader(f)));
 doc.add(new TextField("fileName", f.getName(),Store.YES));
 doc.add(new TextField("fullPath",f.getCanonicalPath(),Store.YES));//路徑索引
 return doc;
 }

執(zhí)行主代碼后結(jié)果如圖:設(shè)計(jì)在索引某個(gè)文件的時(shí)候返回文件“索引文件:+文件路徑”,且計(jì)算輸出索引全部文件花費(fèi)的時(shí)間。

4.3 對(duì)索引的刪除和修改

一般對(duì)數(shù)據(jù)庫(kù)的操作包括CRUD(增加、刪除、更改、查詢),增加就是對(duì)索引項(xiàng)的選擇和建立,查詢作為較為核心的功能會(huì)在之后展開(kāi)論述,這里主要記錄一下在刪除、更新索引時(shí)用到的方法。

刪除分為兩種類型,包括普通的刪除和徹底刪除,因?yàn)樗饕膭h除影響到整個(gè)數(shù)據(jù)庫(kù),而且對(duì)于大型的系統(tǒng)而言,刪除索引意味著對(duì)系統(tǒng)的底層進(jìn)行更改,耗時(shí)耗力而且無(wú)法返回,前面索引的時(shí)候看到建立索引后生成若干小文件,當(dāng)進(jìn)行查找的時(shí)候會(huì)將各個(gè)文件進(jìn)行合并然后查找。普通刪除僅僅是對(duì)之前建立的索引做個(gè)簡(jiǎn)單的標(biāo)記,致使無(wú)法進(jìn)行查找返回。徹底刪除則是對(duì)索引進(jìn)行銷毀,無(wú)法撤銷。以刪除索引項(xiàng)“id”為1的索引為例:

普通的刪除(在合并前刪除):

writer.deleteDocuments(new Term("id","1"));
writer.commit();

徹底的刪除(在合并后刪除):

writer.deleteDocuments(new Term("id","1"));
writer.forceMergeDeletes(); // 強(qiáng)制刪除
writer.commit();

對(duì)索引的修改原理比較簡(jiǎn)單,就是在原有索引的基礎(chǔ)上實(shí)現(xiàn)覆蓋,實(shí)現(xiàn)代碼跟上文的增加索引一樣,在此不多做闡述。

4.4 對(duì)索引的加權(quán)

Lucene默認(rèn)按照相關(guān)度排序,Lucene對(duì)Field提供了一個(gè)可以設(shè)置的Boosting參數(shù),這個(gè)參數(shù)用來(lái)表示記錄的重要性,在滿足搜索條件是,會(huì)優(yōu)先考慮重要性高的記錄,返回結(jié)果靠前,如果記錄較多,權(quán)值低的記錄會(huì)排到首頁(yè)之后,因此,對(duì)索引的加權(quán)操作是影響返回結(jié)果滿意度的重要因素,在實(shí)際設(shè)計(jì)信息系統(tǒng)的時(shí)候,應(yīng)該有嚴(yán)格的權(quán)值計(jì)算公式,方便對(duì)Field權(quán)值的更改,更好的滿足用戶的需求。

例如搜索引擎將點(diǎn)擊率高,鏈入鏈出的網(wǎng)頁(yè)給定較高的權(quán)重,在返回的時(shí)候排到第一頁(yè)。實(shí)現(xiàn)代碼如圖4-1所示,不加權(quán)和加權(quán)結(jié)果對(duì)比如圖4-2所示。

TextField field = new TextField("fullPath", f.getCanonicalPath(), Store.YES);
 if("A GREAT GRIEF.txt".equals(f.getName())){
  field.setBoost(2.0f);//對(duì)文件名為secondry story.txt的fullPath路徑加權(quán);
 }   //默認(rèn)權(quán)重為1.0,改為1.2即增加權(quán)重。
 doc.add(field);

圖4-1:索引加權(quán)

圖4-2:加權(quán)之前

圖4-2:加權(quán)之后

由圖4-2結(jié)果可以看出,不加權(quán)時(shí),按照字典順序排列返回,因此first在secondry之前,在對(duì)secondry命名的文件路徑加權(quán)后,返回的時(shí)候順序發(fā)生變化,實(shí)現(xiàn)對(duì)權(quán)重的測(cè)試。

5 進(jìn)行查詢

Lucene 的檢索接口主要由QueryParser、IndexSearcher、Hits這3 個(gè)類構(gòu)成,QueryParser 是查詢解析器,負(fù)責(zé)解析用戶提交的查詢關(guān)鍵字,在新建一個(gè)解析器時(shí)需要指定要解析的域和使用什么語(yǔ)言分析器,這里使用的語(yǔ)言分析器必須與索引庫(kù)建立時(shí)使用的解析器相同,否則查詢結(jié)果不正確。IndexSearcher是索引搜索器,在實(shí)例化IndexSearcher時(shí)需要指定索引庫(kù)所在的目錄,IndexSearcher有一個(gè)search 方法執(zhí)行索引的檢索,這個(gè)方法接受Query 作為參數(shù),返回Hits,Hists 是一系列排好序的查詢結(jié)果的集合,集合的元素是Document。通過(guò)Document的get 方法可以得到與這個(gè)文檔對(duì)應(yīng)文件的信息,比如:文件名、文件路徑、文件內(nèi)容等。

5.1 基本查詢

如圖查詢主要有兩種方式,但是推薦使用第一種構(gòu)造QueryParser表達(dá)式,它可以有靈活的組合方式,包括布爾邏輯表達(dá)、模糊匹配等,但是第二種Term只能針對(duì)詞匯查詢。

1.構(gòu)造QueryParser查詢式:

QueryParser parser=new QueryParser("fullPath", analyzer);
Query query=parser.parse(q);

2.對(duì)特定項(xiàng)的查詢:

Term t = new Term("fileName", q);
Query query = new TermQuery(t);

查詢結(jié)果如圖5-1所示:以查詢文件名fileName包含“大”為例。

圖5-1:“大”查詢結(jié)果

5.2 模糊查詢

在構(gòu)造QueryParser時(shí),通過(guò)對(duì)詞項(xiàng)q的修改可以實(shí)現(xiàn)精確匹配和模糊匹配。模糊匹配通過(guò)在“q”之后加“~”進(jìn)行修改。如圖5-2所示:

圖5-2:模糊匹配

5.3 限定條件查詢

布爾邏輯查詢和模糊查詢只需要對(duì)查詢?cè)~q進(jìn)行更改,而限定條件查詢需要對(duì)query表達(dá)式進(jìn)行設(shè)定,主要分為以下幾類:

分別為指定項(xiàng)范圍搜索、指定數(shù)字范圍、指定字符串開(kāi)頭和多條件查詢,分別列出應(yīng)用的查詢,true參數(shù)指的:是否包含上限和下限在內(nèi)。

指定項(xiàng)范圍:

TermRangeQuery query=new TermRangeQuery("desc", new BytesRef("b".getBytes()), new BytesRef("c".getBytes()), true, true);

指定數(shù)字范圍:

NumericRangeQuery<Integer> query=NumericRangeQuery.newIntRange("id", 1, 2, true, true);

指定字符串開(kāi)頭:

PrefixQuery query=new PrefixQuery(new Term("city","a"));

多條件查詢:

NumericRangeQuery<Integer>query1=NumericRangeQuery.newIntRange("id", 1, 2, true, true);
PrefixQuery query2=new PrefixQuery(new Term("city","a"));
BooleanQuery.Builder booleanQuery=new BooleanQuery.Builder();
booleanQuery.add(query1,BooleanClause.Occur.MUST);
booleanQuery.add(query2,BooleanClause.Occur.MUST);

5.4 高亮查詢

在百度、谷歌等搜索引擎中,進(jìn)行查詢時(shí),返回的網(wǎng)頁(yè)包含查詢關(guān)鍵字的時(shí)候會(huì)顯示為紅色,且進(jìn)行摘要顯示,即對(duì)包含關(guān)鍵字的部分內(nèi)容進(jìn)行截取并返回。高亮查詢即為實(shí)現(xiàn)對(duì)關(guān)鍵字的樣式更改,本實(shí)驗(yàn)在myeclipse中進(jìn)行,返回結(jié)果并不會(huì)有樣式的改變,只會(huì)對(duì)返回內(nèi)容的關(guān)鍵字添加html標(biāo)簽,如果顯示到網(wǎng)頁(yè)即產(chǎn)生樣式的變化。

高亮的設(shè)置代碼如圖5-3所示,結(jié)果如圖5-4所示,會(huì)對(duì)南京匹配詞添加<b>和<font>標(biāo)簽,顯示到網(wǎng)頁(yè)上為加粗和變紅。

QueryScorer scorer=new QueryScorer(query);
Fragmenter fragmenter=new SimpleSpanFragmenter(scorer);
SimpleHTMLFormatter simpleHTMLFormatter=new SimpleHTMLFormatter("<b><font color='red'>","</font></b>");
Highlighter highlighter=new Highlighter(simpleHTMLFormatter, scorer);
highlighter.setTextFragmenter(fragmenter);

圖5-3:高亮設(shè)置

圖5-4:高亮顯示結(jié)果

6 實(shí)驗(yàn)過(guò)程中遇到的問(wèn)題和不足

Lucene版本更新較快,在jdk版本、eclipse版本和lucene版本之間需要一個(gè)良好的銜接,否則會(huì)造成很多的不兼容,在調(diào)試版本以及jdk1.6和jdk1.8的選擇上出現(xiàn)很多困難,比如網(wǎng)頁(yè)抓取中的append方法在1.8版本已經(jīng)刪除,不能使用。但是對(duì)文檔路勁的讀取FSDirectory.open()則需要jdk1.8才支持。

本實(shí)驗(yàn)的不足之處主要表現(xiàn)在:

代碼的靈活性較低,在爬取網(wǎng)頁(yè)的時(shí)候需要手工進(jìn)行,且需要對(duì)中文和英文分別進(jìn)行,應(yīng)該完善代碼使得對(duì)網(wǎng)頁(yè)的語(yǔ)言有個(gè)判定,然后自動(dòng)選擇執(zhí)行不同的分詞器。

代碼的復(fù)用性較低,沒(méi)有較為合理的分類和方法的構(gòu)建,為了簡(jiǎn)便,基本在幾個(gè)核心代碼中進(jìn)行注釋和標(biāo)記而實(shí)現(xiàn)效果,有待改進(jìn)。

代碼的可移植性較低,對(duì)網(wǎng)頁(yè)的爬取使用的是jdk1.6的版本,Lucene的實(shí)現(xiàn)使用的是jdk1.8的版本,在導(dǎo)出到其他機(jī)器上,需要對(duì)環(huán)境稍加修改和配置,無(wú)法實(shí)現(xiàn)一鍵式操作。

7 總結(jié)

本文從Lucene的原理出發(fā),了解了全文檢索的思路和方法,并對(duì)常用的功能進(jìn)行了實(shí)驗(yàn)和測(cè)試。在實(shí)驗(yàn)的過(guò)程中,了解了搜索引擎的原理,基于信息檢索課程的內(nèi)容上,有了一個(gè)更好的實(shí)操體驗(yàn)。Lucene 是一個(gè)優(yōu)秀的開(kāi)源全文本搜索技術(shù)框架,通過(guò)對(duì)它的深入研究,對(duì)其實(shí)現(xiàn)機(jī)制更加熟悉,在研究它的過(guò)程中學(xué)習(xí)了很多面向?qū)ο蟮木幊谭椒ê退枷?,它良好的系統(tǒng)框架和擴(kuò)展性值得學(xué)習(xí)借鑒。

相關(guān)文章

  • idea項(xiàng)目實(shí)現(xiàn)移除和添加git

    idea項(xiàng)目實(shí)現(xiàn)移除和添加git

    本文指導(dǎo)讀者如何從官網(wǎng)下載并安裝Git,以及在IDEA中配置Git的詳細(xì)步驟,首先,用戶需訪問(wèn)Git官方網(wǎng)站下載適合自己操作系統(tǒng)的Git版本并完成安裝,接著,在IDEA中通過(guò)設(shè)置找到git.exe文件以配置Gi
    2024-10-10
  • 基于spring boot排除掃描類的三種方式小結(jié)

    基于spring boot排除掃描類的三種方式小結(jié)

    這篇文章主要介紹了spring boot排除掃描類的三種方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Java tomcat中的類加載器和安全機(jī)制你了解嗎

    Java tomcat中的類加載器和安全機(jī)制你了解嗎

    這篇文章主要介紹了Tomcat 類加載器的實(shí)現(xiàn)方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下,希望能夠給你帶來(lái)幫助
    2021-09-09
  • Java設(shè)計(jì)模式之單例模式詳解

    Java設(shè)計(jì)模式之單例模式詳解

    這篇文章主要為大家詳細(xì)介紹了Java設(shè)計(jì)模式之單例模式的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • SpringBoot與rabbitmq的結(jié)合的示例

    SpringBoot與rabbitmq的結(jié)合的示例

    這篇文章主要介紹了SpringBoot與rabbitmq的結(jié)合的示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-03-03
  • mybatisplus中EntityWrapper的常用方法

    mybatisplus中EntityWrapper的常用方法

    這篇文章主要介紹了mybatisplus中EntityWrapper的常用方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Spring集成MongoDB的兩種方法實(shí)例

    Spring集成MongoDB的兩種方法實(shí)例

    最近使用到了Spring框架,考慮到數(shù)據(jù)的格式并非有固定的字段格式,因此考慮到使用MongoDB非關(guān)系型數(shù)據(jù)庫(kù)存儲(chǔ)數(shù)據(jù),所以這篇文章主要給大家介紹了Spring集成MongoDB的兩種方法,需要的朋友可以參考下
    2021-09-09
  • springcloud gateway網(wǎng)關(guān)服務(wù)啟動(dòng)報(bào)錯(cuò)的解決

    springcloud gateway網(wǎng)關(guān)服務(wù)啟動(dòng)報(bào)錯(cuò)的解決

    這篇文章主要介紹了springcloud gateway網(wǎng)關(guān)服務(wù)啟動(dòng)報(bào)錯(cuò)的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Spring Boot Hazelcast Caching 使用和配置詳解

    Spring Boot Hazelcast Caching 使用和配置詳解

    這篇文章主要介紹了Spring Boot Hazelcast Caching 使用和配置詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-09-09
  • 解決java文件流處理異常 mark/reset not supported問(wèn)題

    解決java文件流處理異常 mark/reset not supported問(wèn)題

    這篇文章主要介紹了解決java文件流處理異常 mark/reset not supported問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-10-10

最新評(píng)論