首页 > 数据库 >Lucene为数据库建索引

Lucene为数据库建索引

时间:2023-09-21 12:38:56浏览次数:44  
标签:lucene 数据库 new Lucene 索引 import apache org conn


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

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


标签:lucene,数据库,new,Lucene,索引,import,apache,org,conn
From: https://blog.51cto.com/u_16255870/7552762

相关文章

  • oracle 数据库对象自动备份
         本文介绍一种数据库对象备份的方法。其原因是因为我在开发时有两个数据库用户,他们的数据表结构相同,所开发的存储过程也相同,但是数据却是不同地方的数据。因为懒惰所以在修改过程包时只想修改一次就ok,所以想了一个半自动的办法,让数据库自动备份数据库对象,然后编写bat文件......
  • 将Execl表格的数据导入数据库
    ///导入台区///</summary>///<paramname="savePath"></param>///<paramname="msg"></param>///<returns></returns>publicboolUpload(stringsavePath,outst......
  • 慢SQL原因分析之索引失效
    现象最近收到一个慢sql工单,慢sql大概是这样:“selectxxxfromtabelwheretype=1”。咦,type字段明明有索引啊,为啥是慢sql呢?原因通过执行explain,发现实际上数据库执行了全表扫描,从而被系统判定为慢sql。这时有一定开发经验的同事会说:“字段区分度不够,这种字段作单独索引是......
  • Oracle 数据库11g版本dataguard创建的简单方法
    作者:ArupNanda DataGuard了解ActiveDataGuard如何通过实时查询,同时应用归档的的日志、将物理备用数据库转换为快照备用数据库以及对基础架构的一系列改进措施,让您对备份环境的投资物有所值。下载Oracle数据库11gOracle数据库11g对DataGuard功能进行了多方面的增强,......
  • Oracle 数据库日常维护(3)
    常用DBA管理脚本一、数据库构架体系1、表空间的监控是一个重要的任务,我们必须时刻关心表空间的设置,是否满足现在应用的需求,以下的语句可以查询到表空间的详细信息SELECTTABLESPACE_NAME,INITIAL_EXTENT,NEXT_EXTENT,MIN_EXTENTS,MAX_EXTENTS,PCT_INCREASE,MIN_EXTLEN,STATUS,CONTE......
  • 小结给数据库增加表空间的方法
    本来给数据库增加表空间是系统管理员或者dba干的活,但是客户有时候也太”信任“我了,什么活都拿给我干,没法子只好硬着头皮搞了。平时我遇到最多的数据库就是oracle,db2,informix给db2增加表空间的情况还没有遇到过,先在这里总结一下oracle和informix增加表空间的方法。    ORACLE......
  • 数据库sql中判断时间冲突
    数据库现有数据其中两列:s-开始时间,e-结束时间.在新插入数据s',e'之前需要判断两个时间之间是否有重合因为使用mybatis-plus的缘故,结论都使用s或e在符号前面.1.s<e比如yyyy-MM-ddHH:mm:ss格式的数据,多用于判断预约时间和每日排班冲突.对于冲突的情况使用列......
  • 数据库集群
    一、海量数据存储问题    传统的关系型数据库,因为数据存储量越来越大,已经无法满足快速查询与插入数据的需求。NoSql的出现暂时解决了这一危机。它通过降低数据的安全性,减少对事务的支持,减少对复杂查询的支持,换取性能的提升。   有的场景要求绝对要有事务与安全指标......
  • Windows10 Redis数据库的搭建
    参考:https://blog.csdn.net/qq_53381910/article/details/130383352  http://wed.xjx100.cn/news/96490.html?action=onClick......
  • 数据库为什么要索引(转)
    总结:数据库存储顺序随机,如果没有索引,每次查询都需要一行行遍历,查找出符合条件的点,复杂度O(N)数据库会按照rowid排序,并给主键建立索引,所以如果以rowid或者主键为搜索条件,复杂度可以近似看做二分查找的复杂度,即O(logN)如果没有主键,或搜索条件不是主键,可以给搜索目标增加索......