DANCE WITH JAVA

          開發出高質量的系統

          常用鏈接

          統計

          積分與排名

          好友之家

          最新評論

          apache lucene 的核心類

          下邊介紹一下lucene的核心類:(參考lucene in action)
          主要有兩部分組成,核心索引類和核心搜索類,顧名思意,就是用來建立索引和用來搜索的類。

          IndexWriter:可以對索引進行寫操作,但不能讀取或者搜索。是唯一能寫索引的類。

          Directory:Directory類代表一個Lucene索引的位置。它是一個抽象類,允許它的子類(其中的兩個包含在Lucene中)在合適時存儲索引。在我們的Indexer示例中,我們使用一個實際文件系統目錄的路徑傳遞給IndexWriter的構造函數來獲得Directory的一個實例。IndexWriter然后使用Directory的一個具體實現FSDirectory,并在文件系統的一個目錄中創建索引。在你的應用程序中,你可能較喜歡將Lucene索引存儲在磁盤上。這時可以使用FSDirectory,一個包含文件系統真實文件列表的Driectory子類,如同我們在Indexer中一樣。另一個Directory的具體子類是RAMDirectory。盡管它提供了與FSDirectory相同的接口,RAMDirectory將它的所有數據加載到內存中。所以這個實現對較小索引很有用處,可以全部加載到內存中并在程序關閉時銷毀。因為所有數據加載到快速存取的內存中而不是在慢速的硬盤上,RAMDirectory適合于你需要快速訪問索引的情況,不管是索引或搜索。做為實例,Lucene的開發者在所有他們的單元測試中做了擴展使用:當測試運行時,快速的內存駐留索引被創建搜索,當測試結束時,索引自動銷毀,不會在磁盤上留下任何殘余。當然,在將文件緩存到內存的操作系統中使用時RAMDirectory和FSDirectory之間的性能差別較小

          Analyzer:分析文本內容,提取關鍵字

          Document:一個Document代表字段的集合。你可以把它想象為以后可獲取的虛擬文檔—一塊數據,如一個網頁、一個郵件消息或一個文本文件。一個文檔的字段代表這個文檔或與這個文檔相關的元數據

          Field:在索引中的每個Document含有一個或多個字段,具體化為Field類。每個字段相應于數據的一個片段,將在搜索時查詢或從索引中重新獲取。
          Lucene提供四個不同的字段類型,你可以從中做出選擇:

          Keyword—不被分析,但是被索引并逐字存儲到索引中。這個類型適合于原始值需要保持原樣的字段,如URL、文件系統路徑、日期、個人名稱、社會安全號碼、電話號碼等等。例如,我們在Indexer(列表1.1)中把文件系統路徑作為Keyword字段。

          UnIndexed—不被分析也不被索引,但是它的值存儲到索引中。這個類型適合于你需要和搜索結果一起顯示的字段(如URL或數據庫主鍵),但是你從不直接搜索它的值。因為這種類型字段的原始值存儲在索引中,這種類型不適合于存放比較巨大的值,如果索引大小是個問題的話。

          UnStored—和UnIndexed相反。這個字段類型被分析并索引但是不存儲在索引中。它適合于索引大量的文本而不需要以原始形式重新獲得它。例如網頁的主體或任休其它類型的文本文檔。

          Text—被分析并索引。這就意味著這種類型的字段可以被搜索,但是要小心字段大小。如果要索引的數據是一個String,它也被存儲;但如果數據(如我們的Indexer例子)是來自一個Reader,它就不會被存儲。這通常是混亂的來源,所以在使用Field.Text時要注意這個區別。
          所有字段由名稱和值組成。你要使用哪種字段類型取決于你要如何使用這個字段和它的值。嚴格來說,Lucene只有一個字段類型:以各自特征來區分的字段。有些是被分析的,有些不是;有些是被索引,然面有些被逐字地存儲等等。
          注意 注意Field.Text(String, String)和Field.Text(String, Reader)之間的區別。String變量存儲字段數據,而Reader變量不存儲。為索引一個String而又不想存儲它,可以用Field.UnStored(String, String)

          下邊是核心搜索類:
          IndexSearcher:IndexSearcher用來搜索而IndexWriter用來索引:暴露幾個搜索方法的索引的主要鏈接。你可以把IndexSearcher想象為以只讀方式打開索引的一個類。它提供幾個搜索方法,其中一些在抽象基類Searcher中實現;最簡單的接受單個Query對象做為參數并返回一個Hits對象。這個方法的典型應用類似這樣:
          IndexSearcher is = new IndexSearcher(
          FSDirectory.getDirectory(“
          /tmp/index”, false));
          Query q 
          = new TermQuery(new Term(“contents”, “lucene”));
          Hits hits 
          = is.search(q);

          Term:
          Term是搜索的基本單元。與Field對象類似,它由一對字符串元素組成:字段的名稱和字段的值。注意Term對象也和索引過程有關。但是它們是由Lucene內部生成,所以在索引時你
          一般不必考慮它們。在搜索時,你可能創建Term對象并TermQuery同時使用。
          Query q = new TermQuery(new Term(“contents”, “lucene”));
          Hits hits = is.search(q);
          這段代碼使Lucene找出在contents字段中含有單詞lucene的所有文檔。因為TermQuery對象繼承自它的抽象父類Query,你可以在等式的左邊用Query類型。

          Query
          Lucene中包含一些Query的具體子類。到目前為止,在本章中我們僅提到過最基本的Lucene Query:TermQuery。其它Query類型有BooleanQuery,PhraseQuery, PrefixQuery, PhrasePrefixQuery, RangeQuery, FilteredQuery和SpanQuery

          TermQuery
          TermQuery是Lucene支持的最基本的查詢類型,并且它也是最原始的查詢類型之一。它用來匹配含有指定值的字段的文檔.

          Hits類是一個搜索結果(匹配給定查詢的文檔)文檔隊列指針的簡單容器。基于性能考慮,Hits的實例并不從索引中加載所有匹配查詢的所有文檔,而是每次一小部分

          posted on 2007-06-12 09:52 dreamstone 閱讀(2744) 評論(0)  編輯  收藏 所屬分類: 搜索引擎lucence

          主站蜘蛛池模板: 会昌县| 湘潭县| 乡城县| 大邑县| 衡东县| 玉树县| 安溪县| 宁夏| 吴忠市| 佳木斯市| 湟源县| 通渭县| 长泰县| 江都市| 丰顺县| 平安县| 乌什县| 兴业县| 光山县| 安义县| 芷江| 乐山市| 邳州市| 朔州市| 五家渠市| 徐闻县| 界首市| 迭部县| 荣成市| 西乌珠穆沁旗| 宁蒗| 正镶白旗| 永仁县| 瓦房店市| 林州市| 宣汉县| 吐鲁番市| 武安市| 汾阳市| 杭锦旗| 和林格尔县|