Lucene_demo01_FirstProject

来源:互联网 发布:过期域名 编辑:程序博客网 时间:2024/06/06 11:51
Java代码  
  1. /** 
  2.  * 创建一个索引库,把一个信息加入到索引库中、把信息从索引库中检索出来 
  3.  */  
  4. public class HelloLuceneWorld {  
  5.     /** 
  6.      * 创建索引 
  7.      */  
  8.     @Test  
  9.     public void createIndex() throws Exception {  
  10.         // 1创建article对象  
  11.         Article article = new Article();  
  12.         article.setId(1L);  
  13.         article.setTitle("NBA总决赛");  
  14.         article.setContent("LBJ和韦德能带领热火在2013赛季拿到NBA总冠军吗?");  
  15.   
  16.         // 创建索引库,创建IndexWriter对象  
  17.         Directory directory = FSDirectory.open(new File("./indexDir"));  
  18.         Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_30);  
  19.         IndexWriter indexWriter = new IndexWriter(directory, analyzer, MaxFieldLength.LIMITED);  
  20.   
  21.         // 把article对象转化成document、把article对象加入到索引库中  
  22.         Document document = new Document();  
  23.         Field idField = new Field("id", article.getId().toString(), Store.YES, Index.NOT_ANALYZED);  
  24.         Field titleField = new Field("title", article.getTitle(), Store.YES, Index.ANALYZED);  
  25.         Field contentField = new Field("content", article.getContent(), Store.YES, Index.ANALYZED);  
  26.         document.add(idField);  
  27.         document.add(titleField);  
  28.         document.add(contentField);  
  29.   
  30.         indexWriter.addDocument(document);// 信息放入到索引库  
  31.         indexWriter.close();// 关闭indexWriter  
  32.     }  
  33.   
  34.     /** 
  35.      * 进行检索 
  36.      */  
  37.     @Test  
  38.     public void searchIndex() throws Exception {  
  39.         // 创建IndexSearch对象  
  40.         Directory directory = FSDirectory.open(new File("./indexDir"));  
  41.         IndexSearcher indexSearcher = new IndexSearcher(directory);  
  42.         Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_30);  
  43.         QueryParser queryParser = new QueryParser(Version.LUCENE_30, "title", analyzer);  
  44.         Query query = queryParser.parse("总决赛");// 关键词  
  45.         TopDocs topDocs = indexSearcher.search(query, 5);// 第二个参数为n,提取前n条记录  
  46.         int count = topDocs.totalHits;// 根据关键词检索出来的总的记录数  
  47.         ScoreDoc[] scoreDocs = topDocs.scoreDocs;  
  48.         List<Article> articleList = new ArrayList<Article>();  
  49.         for (int i = 0; i < scoreDocs.length; i++) {  
  50.             int index = scoreDocs[i].doc;  
  51.             Document document = indexSearcher.doc(index);  
  52.             Article article = new Article();  
  53.             article.setId(Long.parseLong(document.get("id")));  
  54.             article.setTitle(document.get("title"));  
  55.             article.setContent(document.get("content"));  
  56.             articleList.add(article);  
  57.         }  
  58.   
  59.         // 输出查询到的信息  
  60.         for (Article article : articleList) {  
  61.             System.out.println(article.getId());  
  62.             System.out.println(article.getTitle());  
  63.             System.out.println(article.getContent());  
  64.         }  
  65.     }  
  66. }  
0 0