项目结构:
运行效果:
1.搜索关键字"是"
2.搜索关键字"我"
==========================================
数据库中表信息:
1 CREATE TABLE `mymails` (
2 `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '编号',
3 `name` varchar(50) DEFAULT NULL COMMENT '寄件人',
4 `email` varchar(50) DEFAULT NULL COMMENT '件邮名称',
5 `content` varchar(200) DEFAULT NULL COMMENT '内容',
6 `attach` int(11) DEFAULT NULL COMMENT '附件数',
7 `sendtime` varchar(20) DEFAULT NULL COMMENT '发送日期',
8 PRIMARY KEY (`id`)
9 ) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8;
==========================================
代码部分:
==========================================
/lucene_0500_jdbc/src/com/b510/lucene/util/LuceneUtil.java
1 /**
2 *
3 */
4 package com.b510.lucene.util;
5
6 import java.io.File;
7 import java.io.IOException;
8 import java.sql.Connection;
9 import java.sql.DriverManager;
10 import java.sql.PreparedStatement;
11 import java.sql.ResultSet;
12 import java.sql.SQLException;
13 import java.util.HashMap;
14 import java.util.Map;
15
16 import org.apache.lucene.analysis.standard.StandardAnalyzer;
17 import org.apache.lucene.document.Document;
18 import org.apache.lucene.document.Field;
19 import org.apache.lucene.document.NumericField;
20 import org.apache.lucene.index.CorruptIndexException;
21 import org.apache.lucene.index.IndexReader;
22 import org.apache.lucene.index.IndexWriter;
23 import org.apache.lucene.index.IndexWriterConfig;
24 import org.apache.lucene.index.Term;
25 import org.apache.lucene.search.IndexSearcher;
26 import org.apache.lucene.search.ScoreDoc;
27 import org.apache.lucene.search.TermQuery;
28 import org.apache.lucene.search.TopDocs;
29 import org.apache.lucene.store.Directory;
30 import org.apache.lucene.store.FSDirectory;
31 import org.apache.lucene.store.LockObtainFailedException;
32 import org.apache.lucene.util.Version;
33
34 /**
35 * @author Hongten <br />
36 * @date 2013-1-31
37 */
38 public class LuceneUtil {
39
40 private static String driver = "com.mysql.jdbc.Driver";
41 private static String dbName = "db_lucene";
42 private static String passwrod = "root";
43 private static String userName = "root";
44 private static String url = "jdbc:mysql://localhost:3308/" + dbName;
45
46 private Directory directory = null;
47 /**
48 * 评分
49 */
50 private Map<String, Float> scores = new HashMap<String, Float>();
51
52 public LuceneUtil() {
53 try {
54 scores.put("sina.com", 1.0f);
55 scores.put("foxmail.com", 1.1f);
56 directory = FSDirectory.open(new File("D:/WordPlace/lucene/lucene_0500_jdbc/lucene/index"));
57 } catch (IOException e) {
58 e.printStackTrace();
59 }
60 }
61
62 /**
63 * 创建索引
64 */
65 public void index() {
66 IndexWriter writer = null;
67 try {
68 writer = new IndexWriter(directory, new IndexWriterConfig(Version.LUCENE_35, new StandardAnalyzer(Version.LUCENE_35)));
69 // 删除之前所建立的全部索引
70 writer.deleteAll();
71 // 创建文档
72 Document document = null;
73
74 String sql = "select * from mymails";
75 ResultSet rs = null;
76 try {
77 Class.forName(driver);
78 Connection conn = DriverManager.getConnection(url, userName, passwrod);
79 PreparedStatement ps = conn.prepareStatement(sql);
80 rs = ps.executeQuery();
81
82 while (rs.next()) {
83 System.out.println("id:[" + rs.getString("id") + "] name:[" + rs.getString("name") + "] content:[" + rs.getString("content") + "]");
84
85 document = new Document();
86 document.add(new Field("id", rs.getString("id"), Field.Store.YES, Field.Index.NOT_ANALYZED_NO_NORMS));
87 document.add(new Field("email", rs.getString("email"), Field.Store.YES, Field.Index.NOT_ANALYZED));
88 document.add(new Field("content", rs.getString("content"), Field.Store.YES, Field.Index.ANALYZED));
89 document.add(new Field("name", rs.getString("name"), Field.Store.YES, Field.Index.NOT_ANALYZED_NO_NORMS));
90 document.add(new NumericField("attach", Field.Store.YES, true).setIntValue(Integer.valueOf(rs.getString("attach"))));
91 document.add(new Field("date", rs.getString("sendtime"), Field.Store.YES, Field.Index.ANALYZED));
92
93 // 这里进行加权处理
94 String et = rs.getString("email").substring(rs.getString("email").lastIndexOf("@") + 1);
95 System.out.println(et);
96 if (scores.containsKey(et)) {
97 document.setBoost(scores.get(et));
98 } else {
99 document.setBoost(0.6f);
100 }
101 writer.addDocument(document);
102
103 }
104
105 // 关闭记录集
106 if (rs != null) {
107 try {
108 rs.close();
109 } catch (SQLException e) {
110 e.printStackTrace();
111 }
112 }
113
114 // 关闭声明
115 if (ps != null) {
116 try {
117 ps.close();
118 } catch (SQLException e) {
119 e.printStackTrace();
120 }
121 }
122
123 // 关闭链接对象
124 if (conn != null) {
125 try {
126 conn.close();
127 } catch (SQLException e) {
128 e.printStackTrace();
129 }
130 }
131
132 } catch (Exception e) {
133 e.printStackTrace();
134 }
135
136 } catch (CorruptIndexException e) {
137 e.printStackTrace();
138 } catch (LockObtainFailedException e) {
139 e.printStackTrace();
140 } catch (IOException e) {
141 e.printStackTrace();
142 } finally {
143 if (writer != null) {
144 try {
145 writer.close();
146 } catch (CorruptIndexException e) {
147 e.printStackTrace();
148 } catch (IOException e) {
149 e.printStackTrace();
150 }
151 }
152 }
153 }
154
155 /**
156 * 搜索
157 */
158 public void search(String key) {
159 try {
160 IndexReader reader = IndexReader.open(directory);
161 IndexSearcher searcher = new IndexSearcher(reader);
162 TermQuery query = new TermQuery(new Term("content", key));
163 TopDocs tds = searcher.search(query, 12);
164 for (ScoreDoc sd : tds.scoreDocs) {
165 Document doc = searcher.doc(sd.doc);
166 System.out.println("文档序号:[" + sd.doc + "] 得分:[" + sd.score + "] 邮件名称:[" + doc.get("email") + "] 邮件人:[" + doc.get("name") + "] 附件数:[" + doc.get("attach") + "] 日期:[" + doc.get("date")
167 + "] 内容 : [" + doc.get("content") + "]");
168 }
169 } catch (CorruptIndexException e) {
170 e.printStackTrace();
171 } catch (IOException e) {
172 e.printStackTrace();
173 }
174 }
175 }
/lucene_0500_jdbc/src/com/b510/lucene/test/IndexTest.java
1 /**
2 *
3 */
4 package com.b510.lucene.test;
5
6 import org.junit.Test;
7
8 import com.b510.lucene.util.LuceneUtil;
9
10 /**
11 * @author Hongten <br />
12 * @date 2013-1-31
13 */
14 public class IndexTest {
15
16 @Test
17 public void testIndex(){
18 LuceneUtil util = new LuceneUtil();
19 util.index();
20 }
21
22 @Test
23 public void testSearch(){
24 LuceneUtil util = new LuceneUtil();
25 util.search("我");
26 }
27
28 }