专栏首页Hongtenlucene和JDBC

lucene和JDBC

项目结构:

运行效果:

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 }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • lucene(全文搜索)_建立索引_根据关键字全文搜索_源码下载

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

    Hongten
  • lucene in action_index and search

    你可以到:http://lucene.apache.org/ 了解更新,更全的关于lucene的信息。

    Hongten
  • lucene对日期(date)和整形(int)处理

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

    Hongten
  • lucene(全文搜索)_建立索引_根据关键字全文搜索_源码下载

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

    Hongten
  • Lucene笔记二

    HUC思梦
  • 《Python 源码剖析》一些理解以及勘误笔记(2)

    以下是本人阅读此书时理解的一些笔记,包含一些影响文义的笔误修正,当然不一定正确,贴出来一起讨论。 注:此书剖析的源码是2.5版本,在python.org 可...

    s1mba
  • 弄它!!!小小BGP!理论加实验分分钟拿下!带你体验大网的世界!

    • 理解IGP与EGP的区别及工作场景。 • 理解BGP基本概念(AS的概念、协议特征、报文类型、状态机、对等体类型、同步规则、路由黑洞问 题、IBGP水平...

    不吃小白菜
  • 【DB笔试面试394】在Oracle中,SESSIONS和PROCESSES的关系是什么?

    在数据库安装完成后,常常需要设置SESSIONS和PROCESSES的大小。其中,SESSIONS指定了一个实例中允许的会话数,即能同时登录到数据库的并发用户数...

    小麦苗DBA宝典
  • 用Vue.js开发原生应用选择Weex还是NativeScript?

    Vue.js是一个很好的框架!它有一个友好的学习曲线,结合了最好的React的组件方法和Angular的模板。尽管如此,Vue.js仍然有一个限制,它还不能像R...

    笔阁
  • 设计模式之单例模式与场景实践

    单例介绍 上次总结了设计模式中的module模式,可能没有真真正正的使用在场景中,发现效果并不好,想要使用起来却不那么得心应手, 所以这次我打算换一种方式~~从...

    okaychen

扫码关注云+社区

领取腾讯云代金券