生活随笔
收集整理的這篇文章主要介紹了
lucene简单实例
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
寫文章的時候,感覺比較難寫的就是標題,有時候不知道起什么名字好,反正這里寫的都是關于lucene的一些簡單的實例,就隨便起啦.? Lucene 其實很簡單的,它最主要就是做兩件事:建立索引和進行搜索? 來看一些在lucene中使用的術語,這里并不打算作詳細的介紹,只是點一下而已----因為這一個世界有一種好東西,叫搜索。? IndexWriter:lucene中最重要的的類之一,它主要是用來將文檔加入索引,同時控制索引過程中的一些參數使用。? Analyzer:分析器,主要用于分析搜索引擎遇到的各種文本。常用的有StandardAnalyzer分析器,StopAnalyzer分析器,WhitespaceAnalyzer分析器等。? Directory:索引存放的位置;lucene提供了兩種索引存放的位置,一種是磁盤,一種是內存。一般情況將索引放在磁盤上;相應地lucene提供了FSDirectory和RAMDirectory兩個類。? Document:文檔;Document相當于一個要進行索引的單元,任何可以想要被索引的文件都必須轉化為Document對象才能進行索引。? Field:字段。? IndexSearcher:是lucene中最基本的檢索工具,所有的檢索都會用到IndexSearcher工具;? Query:查詢,lucene中支持模糊查詢,語義查詢,短語查詢,組合查詢等等,如有TermQuery,BooleanQuery,RangeQuery,WildcardQuery等一些類。? QueryParser: 是一個解析用戶輸入的工具,可以通過掃描用戶輸入的字符串,生成Query對象。? Hits:在搜索完成之后,需要把搜索結果返回并顯示給用戶,只有這樣才算是完成搜索的目的。在lucene中,搜索的結果的集合是用Hits類的實例來表示的。? 上面作了一大堆名詞解釋,下面就看幾個簡單的實例吧:? 1、簡單的的StandardAnalyzer測試例子
Java代碼?
package ?lighter.javaeye.com;???? import ?java.io.IOException;??import ?java.io.StringReader;???? import ?org.apache.lucene.analysis.Analyzer;??import ?org.apache.lucene.analysis.Token;??import ?org.apache.lucene.analysis.TokenStream;??import ?org.apache.lucene.analysis.standard.StandardAnalyzer;???? public ?class ?StandardAnalyzerTest???{?? ?????? ????public ?StandardAnalyzerTest()?? ????{?? ????}?? ????public ?static ?void ?main(String[]?args)??? ????{?? ?????????? ????????Analyzer?aAnalyzer?=?new ?StandardAnalyzer();?? ?????????? ????????StringReader?sr?=?new ?StringReader("lighter?javaeye?com?is?the?are?on" );?? ?????????? ????????TokenStream?ts?=?aAnalyzer.tokenStream("name" ,?sr);??? ????????try ?{?? ????????????int ?i=0 ;?? ????????????Token?t?=?ts.next();?? ????????????while (t!=null )?? ????????????{?? ?????????????????? ????????????????i++;?? ?????????????????? ????????????????System.out.println("第" +i+"行:" +t.termText());?? ?????????????????? ????????????????t=ts.next();?? ????????????}?? ????????}?catch ?(IOException?e)?{?? ????????????e.printStackTrace();?? ????????}?? ????}?? }??
顯示結果:?
引用
第1行:lighter?
第2行:javaeye?
第3行:com
提示一下:? StandardAnalyzer是lucene中內置的"標準分析器",可以做如下功能:? 1、對原有句子按照空格進行了分詞? 2、所有的大寫字母都可以能轉換為小寫的字母? 3、可以去掉一些沒有用處的單詞,例如"is","the","are"等單詞,也刪除了所有的標點? 查看一下結果與"new StringReader("lighter javaeye com is the are on")"作一個比較就清楚明了。? 這里不對其API進行解釋了,具體見lucene的官方文檔。需要注意一點,這里的代碼使用的是lucene2的API,與1.43版有一些明顯的差別。? 2、看另一個實例,簡單地建立索引,進行搜索?
Java代碼?
package ?lighter.javaeye.com;??import ?org.apache.lucene.analysis.standard.StandardAnalyzer;??import ?org.apache.lucene.document.Document;??import ?org.apache.lucene.document.Field;??import ?org.apache.lucene.index.IndexWriter;??import ?org.apache.lucene.queryParser.QueryParser;??import ?org.apache.lucene.search.Hits;??import ?org.apache.lucene.search.IndexSearcher;??import ?org.apache.lucene.search.Query;??import ?org.apache.lucene.store.FSDirectory;???? public ?class ?FSDirectoryTest?{???? ?????? ????public ?static ?final ?String?path?=?"c://index2" ;?? ?? ????public ?static ?void ?main(String[]?args)?throws ?Exception?{?? ????????Document?doc1?=?new ?Document();?? ????????doc1.add(?new ?Field("name" ,?"lighter?javaeye?com" ,Field.Store.YES,Field.Index.TOKENIZED));?? ?? ????????Document?doc2?=?new ?Document();?? ????????doc2.add(new ?Field("name" ,?"lighter?blog" ,Field.Store.YES,Field.Index.TOKENIZED));?? ?? ????????IndexWriter?writer?=?new ?IndexWriter(FSDirectory.getDirectory(path,?true ),?new ?StandardAnalyzer(),?true );?? ????????writer.setMaxFieldLength(3 );?? ????????writer.addDocument(doc1);?? ????????writer.setMaxFieldLength(3 );?? ????????writer.addDocument(doc2);?? ????????writer.close();?? ?? ????????IndexSearcher?searcher?=?new ?IndexSearcher(path);?? ????????Hits?hits?=?null ;?? ????????Query?query?=?null ;?? ????????QueryParser?qp?=?new ?QueryParser("name" ,new ?StandardAnalyzer());?? ?????????? ????????query?=?qp.parse("lighter" );?? ????????hits?=?searcher.search(query);?? ????????System.out.println("查找/"lighter/"?共" ?+?hits.length()?+?"個結果" );?? ?? ????????query?=?qp.parse("javaeye" );?? ????????hits?=?searcher.search(query);?? ????????System.out.println("查找/"javaeye/"?共" ?+?hits.length()?+?"個結果" );?? ?? ????}?? ?? }??
運行結果:?
Java代碼?
查找"lighter" ?共2 個結果?? 查找"javaeye" ?共1 個結果??
很久沒有看lucene了,這兩三天又復習了一下,上一些代碼都是前幾個月寫的,只是改動了一些字符串和包名顯示。轉載時請說明,文章來自:http://lighter.javaeye.com。?
?
總結
以上是生活随笔 為你收集整理的lucene简单实例 的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網站內容還不錯,歡迎將生活随笔 推薦給好友。