LuceneIndexDatabase.java
上传用户:cctqzzy
上传日期:2022-03-14
资源大小:12198k
文件大小:4k
源码类别:

搜索引擎

开发平台:

Java

  1. package chapter5;
  2. import java.io.IOException;
  3. import java.io.File;
  4. import java.io.FileReader;
  5. import java.io.IOException;
  6. import java.sql.Connection;
  7. import java.sql.DriverManager;
  8. import java.sql.ResultSet;
  9. import java.sql.SQLException;
  10. import java.sql.Statement;
  11. import jeasy.analysis.MMAnalyzer;
  12. import org.apache.lucene.store.Directory; 
  13. import org.apache.lucene.store.RAMDirectory;
  14. import org.apache.lucene.document.Field;
  15. import org.apache.lucene.document.Document;
  16. import org.apache.lucene.index.IndexWriter;
  17. import org.apache.lucene.analysis.standard.StandardAnalyzer;
  18. /*******************************************************************
  19.  * 本代码完成数据库的记录访问和索引。利用JDBC访问数据库记录,利用Lucene建立
  20.  * 索引,为后续检索使用做好准备。
  21.  *******************************************************************/
  22. public class LuceneIndexDatabase {
  23. private static String Dest_Index_Path = "D:\workshop\DataBaseIndex";
  24. private static Connection conn = null;
  25. private static Statement statmt = null;
  26. private static ResultSet record = null;
  27. /*========================================================
  28.  * 主函数,指定索引目录和待分析的目录,生成Lucene索引
  29.  *========================================================*/
  30. public static void main(String[] args) {
  31. try {
  32. File indexpath = new File(Dest_Index_Path);
  33.     IndexWriter Writer = new IndexWriter(indexpath,new StandardAnalyzer(),true);
  34. getGetConn("sa","sa","lucenedb");
  35. record = getResultSet("select * from  T_Abstrac");
  36. DbIndexBuilder(Writer);
  37. Writer.optimize();
  38. Writer.close();
  39. } catch (IOException e) {
  40. e.printStackTrace();
  41. }
  42. }
  43. /*========================================================
  44.  * 获取数据库连接,取得SQL检索的句柄。
  45.  *========================================================*/
  46. public static void getGetConn(String dbname, String user,String passwd) throws IOException{
  47. try {
  48. Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver")
  49. .newInstance();
  50. } catch (InstantiationException e2) {
  51. e2.printStackTrace();
  52. } catch (IllegalAccessException e2) {
  53. e2.printStackTrace();
  54. } catch (ClassNotFoundException e2) {
  55. e2.printStackTrace();
  56. }
  57. String url = "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=" + dbname;
  58. try {
  59. conn = DriverManager.getConnection(url, user, passwd);
  60. } catch (SQLException e2) {
  61. e2.printStackTrace();
  62. }
  63. }
  64. /*========================================================
  65.  * 获取记录集,利用指定的语句检索数据库,获取结果
  66.  *========================================================*/
  67. public static ResultSet getResultSet(String sqlstate) 
  68. throws IOException{
  69.       try{
  70.           Statement statmt = conn.createStatement();
  71.           ResultSet rs = statmt.executeQuery(sqlstate);
  72.           return rs;
  73.         }
  74.         catch(SQLException e){
  75.           System.out.println(e);
  76.         }
  77.         return null;
  78. }
  79. /*========================================================
  80.  * 创建数据记录的RAM内存索引,生成并添新文档。合并到本地磁盘索引当中
  81.  *========================================================*/
  82. private static void  DbIndexBuilder(IndexWriter fswriter)  
  83. throws IOException{
  84.         while( record.next()){
  85.      Directory ramdirectory = new RAMDirectory();
  86.      IndexWriter RAMWriter = new IndexWriter(ramdirectory,new StandardAnalyzer(),true);
  87.     
  88.      Document document = new Document();
  89.      Field field_id = new Field("Id", record.getString(0), 
  90.      Field.Store.YES,Field.Index.UN_TOKENIZED);
  91.      document.add(field_id);
  92.     
  93.       Field field_name = new Field("Name", record.getString(1), 
  94.      Field.Store.YES,Field.Index.UN_TOKENIZED);
  95.      document.add(field_name);
  96.     
  97.      Field field_source = new Field("Source", record.getString(2), 
  98.      Field.Store.YES,Field.Index.UN_TOKENIZED);
  99.      document.add(field_source);
  100.     
  101.         Field field_abstract = new Field("Abstract", record.getString(3), 
  102.      Field.Store.YES,Field.Index.UN_TOKENIZED);
  103.      document.add(field_abstract);
  104.    
  105.      RAMWriter.addDocument(document);
  106.      RAMWriter.close();      
  107.      fswriter.addIndexes(new Directory[]{ramdirectory});
  108.        }
  109. }
  110. }