生活随笔
收集整理的這篇文章主要介紹了
lucene简单实例
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
寫(xiě)文章的時(shí)候,感覺(jué)比較難寫(xiě)的就是標(biāo)題,有時(shí)候不知道起什么名字好,反正這里寫(xiě)的都是關(guān)于lucene的一些簡(jiǎn)單的實(shí)例,就隨便起啦.? Lucene 其實(shí)很簡(jiǎn)單的,它最主要就是做兩件事:建立索引和進(jìn)行搜索? 來(lái)看一些在lucene中使用的術(shù)語(yǔ),這里并不打算作詳細(xì)的介紹,只是點(diǎn)一下而已----因?yàn)檫@一個(gè)世界有一種好東西,叫搜索。? IndexWriter:lucene中最重要的的類(lèi)之一,它主要是用來(lái)將文檔加入索引,同時(shí)控制索引過(guò)程中的一些參數(shù)使用。? Analyzer:分析器,主要用于分析搜索引擎遇到的各種文本。常用的有StandardAnalyzer分析器,StopAnalyzer分析器,WhitespaceAnalyzer分析器等。? Directory:索引存放的位置;lucene提供了兩種索引存放的位置,一種是磁盤(pán),一種是內(nèi)存。一般情況將索引放在磁盤(pán)上;相應(yīng)地lucene提供了FSDirectory和RAMDirectory兩個(gè)類(lèi)。? Document:文檔;Document相當(dāng)于一個(gè)要進(jìn)行索引的單元,任何可以想要被索引的文件都必須轉(zhuǎn)化為Document對(duì)象才能進(jìn)行索引。? Field:字段。? IndexSearcher:是lucene中最基本的檢索工具,所有的檢索都會(huì)用到IndexSearcher工具;? Query:查詢,lucene中支持模糊查詢,語(yǔ)義查詢,短語(yǔ)查詢,組合查詢等等,如有TermQuery,BooleanQuery,RangeQuery,WildcardQuery等一些類(lèi)。? QueryParser: 是一個(gè)解析用戶輸入的工具,可以通過(guò)掃描用戶輸入的字符串,生成Query對(duì)象。? Hits:在搜索完成之后,需要把搜索結(jié)果返回并顯示給用戶,只有這樣才算是完成搜索的目的。在lucene中,搜索的結(jié)果的集合是用Hits類(lèi)的實(shí)例來(lái)表示的。? 上面作了一大堆名詞解釋,下面就看幾個(gè)簡(jiǎn)單的實(shí)例吧:? 1、簡(jiǎn)單的的StandardAnalyzer測(cè)試?yán)?/p>
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();?? ????????}?? ????}?? }??
顯示結(jié)果:?
引用
第1行:lighter?
第2行:javaeye?
第3行:com
提示一下:? StandardAnalyzer是lucene中內(nèi)置的"標(biāo)準(zhǔn)分析器",可以做如下功能:? 1、對(duì)原有句子按照空格進(jìn)行了分詞? 2、所有的大寫(xiě)字母都可以能轉(zhuǎn)換為小寫(xiě)的字母? 3、可以去掉一些沒(méi)有用處的單詞,例如"is","the","are"等單詞,也刪除了所有的標(biāo)點(diǎn)? 查看一下結(jié)果與"new StringReader("lighter javaeye com is the are on")"作一個(gè)比較就清楚明了。? 這里不對(duì)其API進(jìn)行解釋了,具體見(jiàn)lucene的官方文檔。需要注意一點(diǎn),這里的代碼使用的是lucene2的API,與1.43版有一些明顯的差別。? 2、看另一個(gè)實(shí)例,簡(jiǎn)單地建立索引,進(jìn)行搜索?
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()?+?"個(gè)結(jié)果" );?? ?? ????????query?=?qp.parse("javaeye" );?? ????????hits?=?searcher.search(query);?? ????????System.out.println("查找/"javaeye/"?共" ?+?hits.length()?+?"個(gè)結(jié)果" );?? ?? ????}?? ?? }??
運(yùn)行結(jié)果:?
Java代碼?
查找"lighter" ?共2 個(gè)結(jié)果?? 查找"javaeye" ?共1 個(gè)結(jié)果??
很久沒(méi)有看lucene了,這兩三天又復(fù)習(xí)了一下,上一些代碼都是前幾個(gè)月寫(xiě)的,只是改動(dòng)了一些字符串和包名顯示。轉(zhuǎn)載時(shí)請(qǐng)說(shuō)明,文章來(lái)自:http://lighter.javaeye.com。?
?
總結(jié)
以上是生活随笔 為你收集整理的lucene简单实例 的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔 網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔 推薦給好友。