Lucene 基本概念



首先、要做一個自己的企業內部搜素引擎呢,要認識Lucene:

1、Lucene的貢獻者Doug Cutting是一位自身全文索引/檢索專家,曾經是V-Twin搜索引擎(Apple的Copland操作系統的成就之一)的主要開發者,後在Excite擔任高級系統架構設計師,目前從事於一些INTERNET底層架構的研究。他貢獻出的Lucene的目標是爲各種中小型應用程序加入全文檢索功能。2001年年底成爲APACHE基金會jakarta的一個子項目。

2、Lucene是一個基於Java的全文信息檢索工具包,它不是一個完整的搜索應用程序,而是爲你的應用程序提供索引和搜索功能。Lucene目前是Apache Jakarta家族中的一個開元項目,也是目前最爲流行的基於Java開元全文檢索工具包。


下面來開始Lucene的學習:

說到Java開發,首要步驟一般搜索去官方下載對應的開發包,這裏不再介紹,如果這點還做不到,就不用往下繼續了。因筆者才疏學淺,自己搞不了API,這裏就使用舊的 lucene-2.4.0 版本來學習。

新建一個Java項目工程,本節需要引入三個jar包 lucene-analyzers-2.4.1.jar、lucene-core-2.4.1.jar、lucene-highlighter-2.4.1.jar

[java] view plaincopy
  1. import java.io.StringReader;  
  2.   
  3. import org.apache.lucene.analysis.Analyzer;  
  4. import org.apache.lucene.analysis.Token;  
  5. import org.apache.lucene.analysis.TokenStream;  
  6. import org.apache.lucene.analysis.standard.StandardAnalyzer;  
  7.   
  8.   
  9. public class TestLucene {  
  10.   
  11.     public static void main(String[] args)throws Exception{  
  12.           
  13.         Analyzer analyzer = new StandardAnalyzer();  //分析器  
  14.         TokenStream tokenStream = analyzer.tokenStream(""new StringReader("this is first lucene project"));  
  15.         Token token = new Token();   
  16.         while(null != tokenStream.next(token))  
  17.             System.out.println(token.term());  
  18.           
  19.     }  
  20. }  

輸出結果:

[html] view plaincopy
  1. first  
  2. lucene  
  3. project  

下面我們來看以下Lucene的核心索引類:

IndexWriter:建立索引的核心組件。使用IndexWriter可以新建一個索引並將對象文件逐一添加到索引當中,但不可以執行讀取和搜索操作。

Directory:代表一個lucene索引項的位置。這是一個抽象類,其具體實現有FSDirectory和RAMDirectory。前者將索引寫入硬盤,對應於真實的文件系統路徑,後者將索引寫入內存 ,相比於前者效率高但可用空較小。

Analyzer:對文本內容進行分析的抽象類,具體實現中有停用詞切除、詞幹分析、大小寫切換等功能。

Document:可以視爲文本經過處理後所對應的對象,由多個字段組成,如路徑、標題、摘要、修改日期等等。

Field:字段,對應於文本的某一部分數據,便於檢索時根據結果提取。


Filed使用:

[java] view plaincopy
  1. import org.apache.lucene.document.Field;  
  2.   
  3. public class TestField {  
  4.   
  5.     public static void main(String[] args){  
  6.         Field field = new Field("fname""fvalue", Field.Store.YES, Field.Index.ANALYZED);  
  7.     }  
  8. }  
fname、fvalue爲field的名與值,後面跟兩個參數指存儲和索引的幾種操作。


Lucene與數據庫的類比

概念: 

數據庫                               Lucene

列/字段                              Field

行/記錄                              Document

操作:

查詢(SELECT)           Searcher

添加(INSERT)            IndexWriter.addDocument

刪除(DELETE)           IndexReader.delete

修改(UPDATE)           不支持(可刪除後重新添加)


系統內容實現簡析:


設有兩篇文章1和2

文章1的內容爲:Tom lives in Guangzhou , I live in Guangzhou too .

文字2的內容爲:He once lived in Shanghai .


1)關鍵字處理,例如:lives - live (還原)。

在Lucene中有Analyzer類完成經過上面處理後

文章1的所有關鍵詞爲:[tom] [live] [i] [live] [guangzhou]

文章2的所有關鍵詞爲:[he] [live] [shanghai]


2)倒排索引

上面的對應關係是:“文章號“對”文章中所有關鍵詞“。倒排索引把這個關係倒過來,變成:”關鍵詞“對”擁有該關鍵詞的所有文章號“。

文章1,2經過倒排變成(關鍵詞 文章號)

guangzhou 1

he 2

i 1

live 1,2

shanghai 2

tom 1


3)加上”出現頻率“和”出現位置“信息後,我們的索引結構變爲:

關鍵詞 文章號 [出現頻率]  出現位置

guangzhou 1 [2] 3,6

he 2 [1] 1

i 1 [1] 4

live 1 [2],2 [1] 2,5,2

shanghai 2 [1] 3

tom 1 [1]

以live這行爲例我們說明一下該結構:live在文章1中出現了2詞,文章2中出現了一次,他的出現位置爲”2,5,2“這表示什麼呢?我們需要結合文章號和出現頻率來分析,文章1中出現了2詞,”2,5“就表示live在文章1中出現的兩個位置,文章2中出現了一次,剩下的”2“就表示live是文章2中第2個關鍵字。


原文地址:http://blog.csdn.net/shaopeng5211/article/details/8681863

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章