项目结构:
效果图:
需要建立索引的文件(我们需要从中查找出关键字的文档)
建立好的所有文件
搜索关键字"lucene"信息
大家是不是也想亲自动手尝试一下呢...
=========================================================
代码部分
=========================================================
准备工作:
下载地址: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.创建IndexReader
101 IndexReader reader = IndexReader.open(directory);
102 // 3.根据IndexReader创建IndexSearcher
103 IndexSearcher searcher = new IndexSearcher(reader);
104 // 4.创建搜索的Query
105 // 创建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搜索并返回TopDocs
111 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.关闭reader
123 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-28
11 */
12 public class LuceneIndexTest {
13
14 @Test
15 public final void testIndex() {
16 LuceneIndex luceneIndex= new LuceneIndex();
17 luceneIndex.index();
18 }
19
20 @Test
21 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