1.用lucene為數據庫建索引


一,lucene中比較基礎的建立索引步驟(資料:http://www.ourys.com/post/lucene3-0_database_index.html)

1.指定目錄索引

2.創建Directory對象(參數是存放索引的File類型,根據File的存放地點選擇創建類)

3.創建indexWriter對象,參數(Directory對象,分詞器,是否創建,分詞的最大值)

4.獲取源文件的File數組

5.通過循環將每個文件寫入索引。

     創建Document對象,並創建Field對象(列名稱(文件名、內容等)),將Field加入到Dcument中,通過IndexWriter.addDocument(Document)寫入索引中。

6.關閉indexWriter。

二,連接數據庫的基本過程(資料:http://blog.csdn.net/xiehuan_uestc/article/details/7969321)

基本過程如下:

l 建立數據源

l 導入用到的包

l 加載驅動程序

l 創建與數據庫的連接

l 創建語句對象

l 編寫SQL語句

l 執行SQL語句

l 處理數據

l 關閉相關對象

l 處理異常

 

三,具體步驟:

  說明: 數據庫:sql server 2005

    IDE:myeclipse 10.0

    lucene版本:3.61

   1,sql中新建數據庫test,新建表Article(....)以及加入例子

        myecl中新建webproject,將sqljdbc.jar,lucene-core-3.6.1-javadoc.jar以及lucene-core-3.6.1.jar放在web-inf/lib中

   2,新建DataBaseIndexer.java以及DBConn.java

    

DataBaseIndexer
package com.DBIndex;

import java.io.File;
import java.io.IOException;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Date;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.DateTools;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.index.IndexWriterConfig.OpenMode;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.SimpleFSDirectory;
import org.apache.lucene.util.Version;



/**********************
*
* 建立數據庫索引 lucene3.6+
* 
*/

public class DataBaseIndexer{
public static void main(String[] args) throws IOException,SQLException{
String indexDir = "d:\\lucene\\index";
DBConn conn = new DBConn();
conn.OpenConnection();

ResultSet rs = conn.ExecuteQuery("select * from Article");
// 為表字段建立索引 
Directory dir = new SimpleFSDirectory(new File(indexDir)); 

Analyzer luceneAnalyzer = new StandardAnalyzer(Version.LUCENE_36);
IndexWriterConfig iwc = new IndexWriterConfig(Version.LUCENE_36,luceneAnalyzer);
iwc.setOpenMode(OpenMode.CREATE);
IndexWriter indexWriter = new IndexWriter(dir,iwc);  


while (rs.next()) { 
System.out.println(rs.getString("Article_Title")); 
Document doc = new Document(); 
doc.add(new Field("Article_Title", rs.getString("Article_Title"),Field.Store.YES, Field.Index.ANALYZED)); 
doc.add(new Field("Article_Content", rs.getString("Article_Content"),Field.Store.YES, Field.Index.ANALYZED));
doc.add(new Field("indexDate",DateTools.dateToString(new Date(), DateTools.Resolution.DAY),Field.Store.YES,Field.Index.NOT_ANALYZED)); 
indexWriter.addDocument(doc); 
}
System.out.println("numDocs"+indexWriter.numDocs()); 
indexWriter.close(); 
}
}
DBConn
package com.DBIndex;
import java.text.*;
import java.util.*;
import java.sql.*;
//import com.jstrd.htgl.webservice.XmlUtility; /*XML可能用到*/

/** *//**
 *
 */

public class DBConn {

  public String ClassString=null;
  public String ConnectionString=null;
  public String UserName=null;
  public String PassWord=null;

  public Connection Conn;
  public Statement Stmt;


  public DBConn() {
    //From System.xml
   // ClassString=XmlUtility.getConfigValue("DB_ClassString");//"oracle.jdbc.driver.OracleDriver";
   // ConnectionString=XmlUtility.getConfigValue("DB_ConnectionString");//"jdbc:oracle:thin:@192.168.103.171:1521:jstrd";
    //UserName=XmlUtility.getConfigValue("DB_UserName");//"htgl";
    //PassWord=XmlUtility.getConfigValue("DB_PassWord");//"1";

    //For ODBC
    //ClassString="sun.jdbc.odbc.JdbcOdbcDriver";
    //ConnectionString=("jdbc:odbc:DBDemo");
    //UserName="dbdemo";
    //PassWord="dbdemo";


    //For Access Driver
    //ClassString="sun.jdbc.odbc.JdbcOdbcDriver";
    //ConnectionString=("jdbc:odbc:Driver={MicroSoft Access Driver (*.mdb)};DBQ=C:\\dbdemo.mdb;ImplicitCommitSync=Yes;MaxBufferSize=512;MaxScanRows=128;PageTimeout=5;SafeTransactions=0;Threads=3;UserCommitSync=Yes;").replace('\\','/');

    //For SQLServer Driver
      //      MSSQL 2005:Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
      //      MSSQL 2000:Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); 
    ClassString="com.microsoft.sqlserver.jdbc.SQLServerDriver";
    ConnectionString="jdbc:sqlserver://127.0.0.1:1433;DatabaseName=test;User=sa;Password=1234";
    //ClassString="net.sourceforge.jtds.jdbc.Driver";
   // ConnectionString="jdbc:jtds:sqlserver://127.0.0.1:1433;DatabaseName=name;User=sa;Password=pwd";

    //For Oracle Driver
    //ClassString="oracle.jdbc.driver.OracleDriver";
    //ConnectionString="jdbc:oracle:thin:@192.168.103.171:1521:jstrd";
    //UserName="htgl";
    //PassWord="1";

    //For MySQL Driver
    //ClassString="org.gjt.mm.mysql.Driver";
    //ConnectionString="jdbc:mysql://localhost:3306/blog?user=root&password=pwd&useUnicode=true&characterEncoding=8859_1";
    //ClassString="com.mysql.jdbc.Driver";
    //ConnectionString="jdbc:mysql://localhost:3306/blog?user=root&password=pwd&useUnicode=true&characterEncoding=gb2312";

    //For Sybase Driver
    //ClassString="com.sybase.jdbc.SybDriver";
    //ConnectionString="jdbc:sybase:Tds:localhost:5007/tsdata"; //tsdata為你的數據庫名
    //Properties sysProps = System.getProperties();
    //SysProps.put("user","userid");
    //SysProps.put("password","user_password");
    //If using Sybase then DriverManager.getConnection(ConnectionString,sysProps);
  }

  //打開連接
  public boolean OpenConnection()
  {
   boolean mResult=true;
   try
   {
     Class.forName(ClassString);
     if ((UserName==null) && (PassWord==null))
     {
       Conn= DriverManager.getConnection(ConnectionString);
     }
     else
     {
       Conn= DriverManager.getConnection(ConnectionString,UserName,PassWord);
     }

     Stmt=Conn.createStatement();
     mResult=true;
   }
   catch(Exception e)
   {
     System.out.println(e.toString());
     mResult=false;
   }
   return (mResult);
  }

  //關閉數據庫連接
  public void CloseConnection()
  {
   try
   {
     Stmt.close();
     Conn.close();
   }
   catch(Exception e)
   {
     System.out.println(e.toString());
   }
  }

  //獲取當前時間(JAVA)
  public String GetDateTime()
  {
   Calendar cal  = Calendar.getInstance();
   SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
   String mDateTime=formatter.format(cal.getTime());
   return (mDateTime);
  }

  //獲取當前時間(T-SQL)
  public  java.sql.Date  GetDate()
  {   
    Calendar cal  = Calendar.getInstance();
    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
    String mDateTime=formatter.format(cal.getTime());
    return (java.sql.Date.valueOf(mDateTime));
  }

   //生成新的ID
   public int GetMaxID(String vTableName,String vFieldName)
  {
   int mResult=0;
   boolean mConn=true;
   String mSql=new String();
   mSql = "select max("+vFieldName+")+1 as MaxID from " + vTableName;
   try
   {
       if (Conn!=null){
           mConn=Conn.isClosed();
       }
       if (mConn){
         OpenConnection();
       }

       ResultSet result=ExecuteQuery(mSql);
       if (result.next())
       {
         mResult=result.getInt("MaxID");
       }
       result.close();

       if (mConn)
       {
         CloseConnection();
       }

     }
     catch(Exception e)
     {
       System.out.println(e.toString());
   }
   return (mResult);
 }

  //數據檢索
  public ResultSet ExecuteQuery(String SqlString)
  {
    ResultSet result=null;
    try
    {
      result=Stmt.executeQuery(SqlString);
    }
    catch(Exception e)
    {
      System.out.println(e.toString());
    }
    return (result);
  }

  //數據更新(增、刪、改)
  public int ExecuteUpdate(String SqlString)
  {
    int result=0;
    try
    {
      result=Stmt.executeUpdate(SqlString);
    }
    catch(Exception e)
    {
      System.out.println(e.toString());
    }
    return (result);
  }

}

 

    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM