`
thomas0988
  • 浏览: 472011 次
  • 性别: Icon_minigender_1
  • 来自: 南阳
社区版块
存档分类
最新评论

Lucene为数据库建索引

阅读更多

如果要构建一个全文检索系统,并且文章全部保存在数据库中,那下面的例子会有很大的帮助.

import java.sql.*; 
import org.apache.lucene.analysis.standard.StandardAnalyzer; 
import org.apache.lucene.document.Document; 
import org.apache.lucene.document.Field; 
import org.apache.lucene.index.IndexWriter; 
import org.apache.lucene.queryParser.QueryParser; 
import org.apache.lucene.search.IndexSearcher; 
import org.apache.lucene.search.Query; 
import org.apache.lucene.search.ScoreDoc; 
import org.apache.lucene.search.TopDocs; 
import org.apache.lucene.store.Directory; 
import org.apache.lucene.store.FSDirectory; 

//Lucene为数据库建索引实例 
public class LuceneDB { 
     Connection conn = null; 
    //操作 Oracle 数据库 
     private final String URL = "jdbc:oracle:thin:@localhost:1521:ORCL"; 
     public LuceneDB(){ 
         try { 
             Class.forName("oracle.jdbc.driver.OracleDriver"); 
            //Oracle连接用户名:scott 密码:tiger 
             conn = DriverManager.getConnection(URL,"scott","tiger"); 
         } catch (ClassNotFoundException e) { 
             e.printStackTrace(); 
         } catch (SQLException e) { 
             e.printStackTrace(); 
         } 
     } 

     public Connection getConnection(){ 
         return this.conn; 
     }//获取数据库连接 

     public void close(){ 
         try { 
             this.conn.close(); 
         } catch (SQLException e) { 
             e.printStackTrace(); 
         } 
     }//关闭数据库连接 

     public static void main(String args[]) throws Exception {   
         LuceneDB lucene = new LuceneDB(); 
         IndexWriter writer = null; 
         Connection conn = lucene.getConnection(); 
         String sql = "SELECT * FROM student"; 
         writer = new IndexWriter("D:\\index",new StandardAnalyzer(), true, IndexWriter.MaxFieldLength.LIMITED); 
         PreparedStatement ps = conn.prepareStatement(sql); 
         ResultSet rs = ps.executeQuery(); 
         while(rs.next()){ 
             Document doc = new Document(); 
            //为字段 sname 建索引 
             doc.add(new Field("sname",rs.getString("sname"),Field.Store.YES,Field.Index.ANALYZED)); 
             writer.addDocument(doc);   
         } 
         rs.close();        //关闭记录集 
         conn.close();      //关闭数据库连接 
         writer.optimize(); //索引优化 
         writer.close();    //关闭读写器 
   
         Directory dir = FSDirectory.getDirectory("D:\\index"); 
         IndexSearcher searcher = new IndexSearcher(dir); 
   
        //选择姓名中包含张字的记录 
         QueryParser parser = new QueryParser("sname", new StandardAnalyzer()); 
         Query query = parser.parse("张"); 
         
         TopDocs topDocs = searcher.search(query, 100); 
         ScoreDoc[] hits = topDocs.scoreDocs; 
         for(int i=0;i< hits.length;i++){ 
             int DocId = hits.doc; 
             Document doc = searcher.doc(DocId); 
             System.out.println(doc.get("sname")); //张立             
         } 
     } 
} 

 

其中,Student表的内容如下:
     SNO   SNAME       SS       SAGE SDEPT
     ----- ---------- -- ---------- ----------
     95001 李勇       男         20 CS
     95002 刘晨       女         19 IS
     95003 王敏       女         18 MA
     95004 张立       男         19 IS

为了您的安全,请只打开来源可靠的网址

打开网站    取消

来自: http://hi.baidu.com/youxiandeboshi/blog/item/c855ca1e6b980ffa1ad5764d.html
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics