首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

lucene3.0基础范例

2012-10-06 
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) {

????}
全部程序如下:

  1. package?testlucene;????
  2. import?org.apache.lucene.search.TopDocs;??import?org.apache.lucene.search.IndexSearcher;??
  3. import?org.apache.lucene.index.IndexReader;??import?org.apache.lucene.search.Query;??
  4. import?org.apache.lucene.queryParser.QueryParser;??import?java.util.Date;??
  5. import?org.apache.lucene.search.ScoreDoc;??import?org.apache.lucene.document.Document;??
  6. import?org.apache.lucene.util.Version;??import?org.apache.lucene.analysis.standard.StandardAnalyzer;??
  7. import?org.apache.lucene.store.FSDirectory;??import?java.io.File;??
  8. ????
  9. public?class?LuceneSearch?{??????//?声明一个IndexSearcher对象??
  10. ????private?IndexSearcher?searcher?=?null;??????//?声明一个Query对象??
  11. ????private?Query?query?=?null;????
  12. ????public?LuceneSearch()?{??????????try?{??
  13. ????????????//?创建索引器??????????????searcher?=?new?IndexSearcher(IndexReader.open(FSDirectory.open(new?File(Constants.INDEX_STORE_PATH))));??
  14. ????????}?catch?(Exception?e)?{??????????????e.printStackTrace();??
  15. ????????}??????}??
  16. ??????public?final?TopDocs?search(String?keyword)?{??
  17. ????????System.out.println("正在搜素关键字:"?+?keyword);??????????try?{??
  18. ????????????QueryParser?queryParser?=?new?QueryParser(Version.LUCENE_30,?"content",?new?StandardAnalyzer(Version.LUCENE_30));??????????????//?将待检索关键字打包成Query对象??
  19. ????????????query?=?queryParser.parse(keyword);??????????????Date?start?=?new?Date();??
  20. ????????????//?使用索引器检索Query,得到检索结果Hits对象??????????????TopDocs?hits?=?searcher.search(query,?10);//?有变化的地方??
  21. ????????????Date?end?=?new?Date();??????????????System.out.println("搜索完毕用时:"?+?(end.getTime()?-?start.getTime())????+?"毫秒");??
  22. ????????????return?hits;??????????}?catch?(Exception?ex)?{??
  23. ????????????return?null;??????????}??
  24. ????}????
  25. ????public?void?printResult(TopDocs?hits)?{??????????if?(hits.totalHits?==?0)?{??
  26. ????????????System.out.println("没有找到您需要的结果");??????????}?else?{??
  27. ????????????for?(int?i?=?0;?i?<?hits.scoreDocs.length;?i++)?{??????????????????try?{??
  28. ????????????????????ScoreDoc?scoreDoc?=?hits.scoreDocs[i];//?有变化的地方??????????????????????Document?doc?=?searcher.doc(scoreDoc.doc);//?有变化的地方??
  29. ????????????????????System.out.print("这是第"?+?(i+1)?+?"个检索结果,文件路径为:");??????????????????????System.out.println(doc.get("path"));??
  30. ??????????????????}?catch?(Exception?ex)?{??
  31. ??????????????????}??
  32. ??????????????}??
  33. ????????}??????????System.out.println("--------------------------------");??
  34. ????}????
  35. ????public?static?void?main(String[]?args)?throws?Exception?{?????????????????LuceneSearch?test?=?new?LuceneSearch();??
  36. ????????TopDocs?hits?=?null;????
  37. ????????hits?=?test.search("中华");??????????test.printResult(hits);??
  38. ??????????hits?=?test.search("人民");??
  39. ????????test.printResult(hits);????
  40. ????????hits?=?test.search("共和国");??????????test.printResult(hits);??
  41. ????}??}??

在执行第一部分的程序得到索引后,执行搜索程序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   很好  很适合入门

热点排行