lucene3.0基础范例
lucene3.0基础实例Lucene3.0和Lucene2.0API有多处改动,以下实例用Luence3.0实现。??第一部分:Lucene建立索
lucene3.0基础实例
Lucene3.0和Lucene2.0API有多处改动,以下实例用Luence3.0实现。
?
?第一部分:Lucene建立索引
Lucene建立索引主要有以下两步:
第一步:建立索引器
第二步:添加索引文件
准备在E盘建立testlucene文件夹,然后在testlucene下建立文件夹test和index两个文件夹。
在test文件夹下建立如下四个txt文件
a.txt 内容:中华人民共和国
b.txt 内容:人民共和国
c.txt 内容:人民
d.txt 内容:共和国
这四个文件就是我们要建立索引的文件,
Index文件夹作为索引结果输出文件夹
准备工作完成以后,我们开始建立索引。
第一步:建立索引器,如下
writer = new IndexWriter(FSDirectory.open(new File(Constants.INDEX_STORE_PATH)), new StandardAnalyzer(
?????Version.LUCENE_30), true, IndexWriter.MaxFieldLength.LIMITED);
第二步:添加索引文件
writer.addDocument(doc);
具体完整代码如下:
?
?????System.out.println(doc.get("path"));
????} catch (Exception ex) {
????}
全部程序如下:
- package?testlucene;????
- import?org.apache.lucene.search.TopDocs;??import?org.apache.lucene.search.IndexSearcher;??
- import?org.apache.lucene.index.IndexReader;??import?org.apache.lucene.search.Query;??
- import?org.apache.lucene.queryParser.QueryParser;??import?java.util.Date;??
- import?org.apache.lucene.search.ScoreDoc;??import?org.apache.lucene.document.Document;??
- import?org.apache.lucene.util.Version;??import?org.apache.lucene.analysis.standard.StandardAnalyzer;??
- import?org.apache.lucene.store.FSDirectory;??import?java.io.File;??
- ????
- public?class?LuceneSearch?{??????//?声明一个IndexSearcher对象??
- ????private?IndexSearcher?searcher?=?null;??????//?声明一个Query对象??
- ????private?Query?query?=?null;????
- ????public?LuceneSearch()?{??????????try?{??
- ????????????//?创建索引器??????????????searcher?=?new?IndexSearcher(IndexReader.open(FSDirectory.open(new?File(Constants.INDEX_STORE_PATH))));??
- ????????}?catch?(Exception?e)?{??????????????e.printStackTrace();??
- ????????}??????}??
- ??????public?final?TopDocs?search(String?keyword)?{??
- ????????System.out.println("正在搜素关键字:"?+?keyword);??????????try?{??
- ????????????QueryParser?queryParser?=?new?QueryParser(Version.LUCENE_30,?"content",?new?StandardAnalyzer(Version.LUCENE_30));??????????????//?将待检索关键字打包成Query对象??
- ????????????query?=?queryParser.parse(keyword);??????????????Date?start?=?new?Date();??
- ????????????//?使用索引器检索Query,得到检索结果Hits对象??????????????TopDocs?hits?=?searcher.search(query,?10);//?有变化的地方??
- ????????????Date?end?=?new?Date();??????????????System.out.println("搜索完毕用时:"?+?(end.getTime()?-?start.getTime())????+?"毫秒");??
- ????????????return?hits;??????????}?catch?(Exception?ex)?{??
- ????????????return?null;??????????}??
- ????}????
- ????public?void?printResult(TopDocs?hits)?{??????????if?(hits.totalHits?==?0)?{??
- ????????????System.out.println("没有找到您需要的结果");??????????}?else?{??
- ????????????for?(int?i?=?0;?i?<?hits.scoreDocs.length;?i++)?{??????????????????try?{??
- ????????????????????ScoreDoc?scoreDoc?=?hits.scoreDocs[i];//?有变化的地方??????????????????????Document?doc?=?searcher.doc(scoreDoc.doc);//?有变化的地方??
- ????????????????????System.out.print("这是第"?+?(i+1)?+?"个检索结果,文件路径为:");??????????????????????System.out.println(doc.get("path"));??
- ??????????????????}?catch?(Exception?ex)?{??
- ??????????????????}??
- ??????????????}??
- ????????}??????????System.out.println("--------------------------------");??
- ????}????
- ????public?static?void?main(String[]?args)?throws?Exception?{?????????????????LuceneSearch?test?=?new?LuceneSearch();??
- ????????TopDocs?hits?=?null;????
- ????????hits?=?test.search("中华");??????????test.printResult(hits);??
- ??????????hits?=?test.search("人民");??
- ????????test.printResult(hits);????
- ????????hits?=?test.search("共和国");??????????test.printResult(hits);??
- ????}??}??
在执行第一部分的程序得到索引后,执行搜索程序LuceneSearch,在控制台下得到结果如下:
(对比我们在f:/testlucene/test下的四个文件可知,检索结果正确)
正在搜素关键字:中华
搜索完毕用时:15毫秒
这是第1个检索结果,文件路径为:E:/testlucene/test/a.txt
--------------------------------
正在搜素关键字:人民
搜索完毕用时:0毫秒
这是第1个检索结果,文件路径为:E:/testlucene/test/c.txt
这是第2个检索结果,文件路径为:E:/testlucene/test/b.txt
这是第3个检索结果,文件路径为:E:/testlucene/test/a.txt
--------------------------------
正在搜素关键字:共和国
搜索完毕用时:0毫秒
这是第1个检索结果,文件路径为:E:/testlucene/test/d.txt
这是第2个检索结果,文件路径为:E:/testlucene/test/b.txt
这是第3个检索结果,文件路径为:E:/testlucene/test/a.txt
--------------------------------
总结
通过以上两篇文章我们看以看到使用lucene建立索引过程主要有一下4步:
1.提取文本
2.构建Document
3.分析
4.建立索引
1 楼 chasewade 2012-02-17 很好 很适合入门