Lucene入門使用

來源:互聯網
上載者:User

http://www.zzbaike.com/wiki/Lucene%E5%85%A5%E9%97%A8%E4%BD%BF%E7%94%A8

 http://blog.csdn.net/mxz391/archive/2007/05/15/1610140.aspx

 

Lucene入門使用

【AD】:最快的美國主機,不限空間,不限流量! | 註冊網域名稱到世界最大的註冊商Godaddy,中文.com網域名稱50元!

出自站長百科跳轉到: 導航, 搜尋

目錄

[隱藏]

  • 1 Lucene的下載和配置
  • 2 Lucene 的範例(Demo )
  • 3 利用Lucene進行索引
  • 4 利用Lucene進行檢索
  • 5 Lucene的其他使用
  • 6 總結
  • 7 參考來源

Lucene的下載和配置

1、Lucene的下載

lucene在jakarta項目中的發布首頁:http://jakarta.apache.org/lucene/docs/index.html。

2、lucene的配置 首先請確定你的機子已經進行了Java使用環境的基本配置,即確保在某個平台下能夠運行java原始碼,否則請查閱相關文檔進行配置。

接下來進入lucene的配置:

普通使用者:在環境變數的CLASSPATH中添加lucene的位置。比如:“D:\java \lucene-1.4-final\lucene-1.4-final.jar;”。

Jbuilder使用者:在“Project”--“Project Properties”--“Required Libraries”進行添加。

Jsp使用者:也可以直接將lucene-1.4-final.jar檔案放到\WEB-INF\classes下。

Lucene 的範例(Demo )

1、Demo說明

可以得到的Demo包括:lucene-demos-1.4-final、XMLIndexingDemo,lucene-demos-1.4-final中包括對普通檔案和html檔案的兩種索引,XMLIndexingDemo針對xml檔案的索引。他們的區別主要在於:對普通檔案進行索引時只要對檔案的全文進行索引,而針對html、xml檔案時,對標籤類型不能進行索引,在實現上:html、xml的索引需要額外的資料流分析器,以分析哪些內容有用哪些無用。因此,在後兩者實現上,索引的時間額外開支,甚至超過索引本身時間,而檢索時間沒有區別。

以上Demo中,lucene-demos-1.4-final內建於lucene-1.4-final.zip中,XMLIndexingDemo的: http://cvs.apache.org/viewcvs.cgi/jakarta-lucene-sandbox/contributions/XML-Indexing-Demo/

2、Demo的運行

首先將demo.jar的路徑添加如環境變數的CLASSPATH中,例如:“D:\java\lucene-1.4-final\lucene-demos-1.4-final.jar;”,同時確保已經添加lucene-1.4-final.jar。

然後進行檔案的全文索引,在dos控制台中,輸入命令“java org.apache.lucene.demo.IndexFiles {full-path-to-lucene}/src”,後面的路徑為所要進行索引的檔案夾,例如:“java org.apache.lucene.demo.IndexFiles c:\test”。

接著對索引進行檢索,敲入“java org.apache.lucene.demo.SearchFiles”,在提示“Query:”後輸入檢索詞,程式將進行檢索列出檢索得到的結果(檢索詞出現的檔案路徑)。其他Demo的運行請參考\docs\demo.html。

在運行Demo後請閱讀Demo的原始碼以便深入學習。

利用Lucene進行索引

進行lucene的熟悉後,我們將學習如何使用Lucene。

一段索引的應用執行個體:

   //需要捕捉IOException異常   //建立一個IndexWriter,索引儲存目錄為“index”   String[] stopStrs = {       "他奶奶的", "fuck"};    StandardAnalyzer analyzer = new StandardAnalyzer(stopStrs);   IndexWriter writer = new IndexWriter("index", analyzer, true);      //添加一條文檔   Document doc = new Document();   doc.add(Field.UnIndexed("id", "1"));//“id”為欄位名,“1”為欄位值   doc.add(Field.Text("text", "fuck,他奶奶的,入門與使用"));   writer.addDocument(doc);      //索引完成後的處理   writer.optimize();   writer.close();

看完這段執行個體後,我們開始熟悉lucene的使用:

1、Lucene的索引介面

在學習索引的時候,首先需要熟悉幾個介面:

  • 1.1、分析器Analyzer

分析器主要工作是篩選,一段文檔進來以後,經過它,出去的時候只剩下那些有用的部分,其他則剔除。而這個分析器也可以自己根據需要而編寫。

org.apache.lucene.analysis.Analyzer:這是一個虛構類,以下兩個借口均繼承它而來。

org.apache.lucene.analysis.SimpleAnalyzer:分析器,支援最簡單拉丁語言。

org.apache.lucene.analysis.standard.StandardAnalyzer:標準分析器,除了拉丁語言還支援亞洲語言,並在一些匹配功能上進行完善。在這個介面中還有一個很重要的建構函式:

StandardAnalyzer(String[] stopWords),可以對分析器定義一些使用詞語,這不僅可以免除檢索一些無用資訊,而且還可以在檢索中定義禁止的政治性、非法性的檢索關鍵詞。

  • 1.2 IndexWriter

IndexWriter的建構函式有三種介面,針對目錄Directory、檔案File、檔案路徑String三種情況。

例如IndexWriter(String path, Analyzer a, boolean create),path為檔案路徑,a為分析器,create標誌是否重建索引(true:建立或者覆蓋已存在的索引,false:擴充已存在的索引。)

I ndexWriter為了減少大量的io維護操作,在每得到一定量的索引後建立新的小索引檔案(筆者測試索引批量的最小單位為10),然後再定期將它們整合到一個索引檔案中,因此在索引結束時必須進行wirter. optimize(),以便將所有索引合并最佳化。

  • 1.3 org.apache.lucene.document

以下介紹兩種主要的類:

a)org.apache.lucene.document.Document:

Document文檔類似資料庫中的一條記錄,可以由好幾個欄位(Field)組成,並且欄位可以套用不同的類型(詳細見b)。Document的幾種介面:

b)org.apache.lucene.document.Field

即上文所說的“欄位”,它是Document的片段section。

Field的建構函式: Field(String name, String string, boolean store, boolean index, boolean token)。

Indexed:如果欄位是Indexed的,表示這個欄位是可檢索的。

Stored:如果欄位是Stored的,表示這個欄位的值可以從檢索結果中得到。

Tokenized:如果一個欄位是Tokenized的,表示它是有經過Analyzer轉變後成為一個tokens序列,在這個轉變過程tokenization中,Analyzer提取出需要進行索引的文本,而剔除一些冗餘的詞句(例如:a,the,they等,詳見org.apache.lucene.analysis.StopAnalyzer.ENGLISH_STOP_WORDS和org.apache.lucene.analysis.standard.StandardAnalyzer(String[] stopWords)的API)。

Token是索引時候的基本單元,代表一個被索引的詞,例如一個英文單詞,或者一個漢字。因此,所有包含中文的文本都必須是Tokenized的。

Field的幾種介面:

利用Lucene進行檢索

1、 一段簡單的檢索代碼

   //需要捕捉IOException,ParseException異常   //處理檢索條件   Query query = QueryParser.parse("入門", "text", analyzer);   //檢索   Searcher searcher = new IndexSearcher("./index");//"index"指定索引檔案位置   Hits hits = searcher.search(query);   //列印結果值集   for (int i = 0; i < hits.length(); i++) {     Document doc = hits.doc(i);     String id = doc.get("id");     System.out.println("found " + "入門" + " on the id:" + id);   }

2、利用Lucene的檢索介面

  • 2.1 Query與QueryParser

主要使用方法:

QueryParser .parse(String query, String field, Analyzer analyzer),例如:

Query query = QueryParser.parse("入門", "text", analyzer);

"入門"為檢索詞, "text"為檢索的欄位名, analyzer為分析器

  • 2.2 Hits與Searcher

Hits的主要使用介面:

Lucene的其他使用

1、Lucene 的索引修改

下面給出一段修改索引的代碼,請根據Lucene的API解讀:

 /**  * 對已有的索引添加新的一條索引  * @param idStr String:要修改的id  * @param doc Document:要修改的值  */ public void addIndex(String idStr, String valueStr) {   StandardAnalyzer analyzer = new StandardAnalyzer();   IndexWriter writer = null;   try {     writer = new IndexWriter(indexPath, analyzer, false);     writer.mergeFactor = 2; //修正lucene 1.4.2 bug,否則不能正確反映修改     Document doc = new Document();     doc.add(Field.UnIndexed("id", idStr));//“id”為欄位名,“1”為欄位值     doc.add(Field.Text("text", valueStr));     writer.addDocument(doc);     writer.optimize();     writer.close();   }   catch (IOException ioe) {     ioe.printStackTrace();   } } /**  * 刪除索引  *  * @param idStr String  */ public void deleteIndex(String idStr) {   try {     Directory dirt = FSDirectory.getDirectory(indexPath, false);     IndexReader reader = IndexReader.open(dirt);     Term term = new Term("text", idStr);     reader.delete(term);     reader.close();     dirt.close();   }   catch (IOException ioe) {     ioe.printStackTrace();   } }

2、Lucene 的檢索結果排序

Lucene的排序主要是對org.apache.lucene.search.Sort的使用。Sort可以直接根據欄位Field產生,也可以根據標準的SortField產生,但是作為Sort的欄位,必須符合以下的條件:唯一值以及Indexed。可以對Integers, Floats, Strings三種類型排序。

對整數型的ID檢索結果排序只要進行以下的簡單操作:

 Sort sort = new Sort("id"); Hits hits = searcher.search(query, sort);

使用者還可以根據自己定義更加複雜的排序,詳細請參考API。

總結

Lucene給java的全文索引檢索帶來了非常強大的力量,以上僅對Lucene進行簡單的入門說明

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.