lucene检索的具体实现

来源:互联网 发布:java怎么用国密 编辑:程序博客网 时间:2024/05/14 07:11

项目结构:

效果图:

需要建立索引的文件(我们需要从中查找出关键字的文档)

建立好的所有文件

搜索关键字"lucene"信息

大家是不是也想亲自动手尝试一下呢...

=========================================================

代码部分

=========================================================

准备工作:

下载:lucene-3.5.0.zip

下载地址:http://archive.apache.org/dist/lucene/java/3.5.0/

下载完后,解压缩,可以得到:

lucene-core-3.5.0.jar

junit-4.7.jar

把这两个jar包加入到项目构建路径下面...看看----->项目结构

/lucene_0100_helloworld/src/com/b510/lucene/LuceneIndex.java

复制代码
  1 /**  2  *   3  */  4 package com.b510.lucene;  5   6 import java.io.File;  7 import java.io.FileReader;  8 import java.io.IOException;  9  10 import org.apache.lucene.analysis.standard.StandardAnalyzer; 11 import org.apache.lucene.document.Document; 12 import org.apache.lucene.document.Field; 13 import org.apache.lucene.index.CorruptIndexException; 14 import org.apache.lucene.index.IndexReader; 15 import org.apache.lucene.index.IndexWriter; 16 import org.apache.lucene.index.IndexWriterConfig; 17 import org.apache.lucene.queryParser.ParseException; 18 import org.apache.lucene.queryParser.QueryParser; 19 import org.apache.lucene.search.IndexSearcher; 20 import org.apache.lucene.search.Query; 21 import org.apache.lucene.search.ScoreDoc; 22 import org.apache.lucene.search.TopDocs; 23 import org.apache.lucene.store.Directory; 24 import org.apache.lucene.store.FSDirectory; 25 import org.apache.lucene.store.LockObtainFailedException; 26 import org.apache.lucene.util.Version; 27  28 /** 29  * Lucene create Index and search key word 30  *  31  * @author Hongten (hongtenzone@foxmail.com) <br /> 32  * @date 2012-11-28 33  */ 34 public class LuceneIndex { 35  36     /** 37      * 创建索引 38      */ 39     public void index() { 40         IndexWriter writer = null; 41         try { 42             // 1.创建Directory 43             // 这种方式是建立在内存中 44             // Directory directory = new RAMDirectory(); 45             // 这种方式是存放在硬盘中 46             Directory directory = FSDirectory.open(new File( 47                     "D:/WordPlace/lucene/lucene_0100_helloworld/lucene/index")); 48             // 2.创建IndexWriter 49             IndexWriterConfig iwc = new IndexWriterConfig(Version.LUCENE_35, 50                     new StandardAnalyzer(Version.LUCENE_35)); 51  52             writer = new IndexWriter(directory, iwc); 53             // 3.创建Document对象 54             Document doc = null; 55             // 4.为Document添加Field 56             File f = new File( 57                     "D:/WordPlace/lucene/lucene_0100_helloworld/lucene/example"); 58             for (File file : f.listFiles()) { 59                 doc = new Document(); 60                 doc.add(new Field("content", new FileReader(file))); 61                 doc.add(new Field("filename", file.getName(), Field.Store.YES, 62                         Field.Index.NOT_ANALYZED)); 63                 doc.add(new Field("path", file.getAbsolutePath(), 64                         Field.Store.YES, Field.Index.NOT_ANALYZED)); 65                 // 5.通过IndexWriter添加文档到索引中 66                 writer.addDocument(doc); 67             } 68         } catch (CorruptIndexException ce) { 69             ce.printStackTrace(); 70         } catch (LockObtainFailedException e) { 71             e.printStackTrace(); 72         } catch (IOException e) { 73             e.printStackTrace(); 74         } finally { 75             try { 76                 if (writer != null) { 77                     writer.close(); 78                 } 79             } catch (CorruptIndexException e2) { 80                 e2.printStackTrace(); 81             } catch (IOException ioe) { 82                 ioe.printStackTrace(); 83             } 84         } 85     } 86  87     /** 88      * 搜索关键字为key的n条记录 89      *  90      * @param key 91      *            关键字 92      * @param n 93      *            搜索的记录数 94      */ 95     public void search(String key, int n) { 96         try { 97             // 1.创建Directory 98             Directory directory = FSDirectory.open(new File( 99                     "D:/WordPlace/lucene/lucene_0100_helloworld/lucene/index"));100             // 2.创建IndexReader101             IndexReader reader = IndexReader.open(directory);102             // 3.根据IndexReader创建IndexSearcher103             IndexSearcher searcher = new IndexSearcher(reader);104             // 4.创建搜索的Query105             // 创建parser来确定要搜索的文件的内容,第二个参数表示搜索的域106             QueryParser parser = new QueryParser(Version.LUCENE_35, "content",107                     new StandardAnalyzer(Version.LUCENE_35));108             // 创建query,表示搜索域为content中包含key的文档109             Query query = parser.parse(key);110             // 5.根据searcher搜索并返回TopDocs111             TopDocs tds = searcher.search(query, n);112             // 6.根据TopDocs获取ScoreDoc对象113             ScoreDoc[] sds = tds.scoreDocs;114             for (ScoreDoc sd : sds) {115                 // 7.根据searcher和ScordDoc对象获取具体的Document对象116                 Document document = searcher.doc(sd.doc);117                 // 8.根据Document对象获取需要的值118                 System.out.println("文件名称:[" + document.get("filename")119                         + "]  文件路径:[" + document.get("path") + "]");120             }121 122             // 9.关闭reader123             reader.close();124         } catch (CorruptIndexException e) {125             e.printStackTrace();126         } catch (IOException e) {127             e.printStackTrace();128         } catch (ParseException e) {129             e.printStackTrace();130         }131     }132 133 }
复制代码

/lucene_0100_helloworld/src/com/b510/lucene/LuceneIndexTest.java

复制代码
 1 /** 2  *  3  */ 4 package com.b510.lucene; 5  6 import org.junit.Test; 7  8 /** 9  * @author Hongten (hongtenzone@foxmail.com) <br />10  * @date 2012-11-2811  */12 public class LuceneIndexTest {13 14     @Test15     public final void testIndex() {16         LuceneIndex luceneIndex=  new LuceneIndex();17         luceneIndex.index();18     }19     20     @Test21     public final void testSearch(){22         LuceneIndex luceneIndex=  new LuceneIndex();23         luceneIndex.search("lucene", 10);24     }25 26 }
复制代码

 

项目源码下载地址:http://files.cnblogs.com/hongten/lucene_0100_helloworld.zip

0 0
原创粉丝点击