用lucene为数据库搜索建立增量索引

简介: 用 lucene 建立索引不可能每次都重新开始建立,而是按照新增加的记录,一次次的递增建立索引的IndexWriter类,有三个参数 IndexWriter writer = new Inde...
用 lucene 建立索引不可能每次都重新开始建立,而是按照新增加的记录,一次次的递增
建立索引的IndexWriter类,有三个参数 

用lucene为数据库搜索建立增量索引 - happyboy200032 - happyboy200032的博客IndexWriter writer = new IndexWriter(path, new StandardAnalyzer(),isEmpty);

其中第三个参数是bool型的,指定它可以确定是增量索引,还是重建索引.
对于从数据库中读取的记录,譬如要为文章建立索引,我们可以记录文章的id号,然后下次再次建立索引的时候读取存下的id号,从此id后往下继续增加索引,逻辑如下.

建立增量索引,主要代码如下
public void createIndex(String path)
{
     Statement myStatement = null;
     String articleId="0";
     //读取文件,获得文章id号码,这里只存最后一篇索引的文章id
    try { 
        FileReader fr = new FileReader("**.txt");
        BufferedReader br = new BufferedReader(fr);                 
        articleId=br.readLine();
        if(articleId==null||articleId=="")
        articleId="0";
        br.close();
        fr.close(); 
      } catch (IOException e) { 
        System.out.println("error343!");
        e.printStackTrace();
      }
    try {
        //sql语句,根据id读取下面的内容
        String sqlText = "*****"+articleId;
        myStatement = conn.createStatement();
        ResultSet rs = myStatement.executeQuery(sqlText);
       //写索引
        while (rs.next()) {
         Document doc = new Document();
         doc.add(Field.Keyword("**", DateAdded));
         doc.add(Field.Keyword("**", articleid));
         doc.add(Field.Text("**", URL));    
         doc.add(Field.Text("**", Content));
         doc.add(Field.Text("**", Title));    
         try{
            writer.addDocument(doc);
          }
          catch(IOException e){
            e.printStackTrace();
         }
           //将我索引的最后一篇文章的id写入文件
          try { 
           FileWriter fw = new FileWriter("**.txt");
           PrintWriter out = new PrintWriter(fw);    
           out.close();
           fw.close();
           } catch (IOException e) { 
             e.printStackTrace();
           }
         }
            ind.Close();
            System.out.println("ok.end");
         }
         catch (SQLException e){
            e.printStackTrace();
        }
        finally {
            //数据库关闭操作
        }        
    }


然后控制是都建立增量索引的时候根据能否都到id值来设置IndexWriter的第三个参数为true 或者是false

 boolean isEmpty = true;
 try { 
    FileReader fr = new FileReader("**.txt");
    BufferedReader br = new BufferedReader(fr);                 
    if(br.readLine()!= null) {
        isEmpty = false;
     }
     br.close();
     fr.close(); 
    } catch (IOException e) { 
       e.printStackTrace();
  }
            
  writer = new IndexWriter(Directory, new StandardAnalyzer(),isEmpty);
目录
相关文章
|
11月前
|
存储 关系型数据库 MySQL
MySQL数据库索引的数据结构?
MySQL中默认使用B+tree索引,它是一种多路平衡搜索树,具有树高较低、检索速度快的特点。所有数据存储在叶子节点,非叶子节点仅作索引,且叶子节点形成双向链表,便于区间查询。
276 4
|
存储 算法 关系型数据库
数据库主键与索引详解
本文介绍了主键与索引的核心特性及其区别。主键具有唯一标识、数量限制、存储类型和自动排序等特点,用于确保数据完整性和提升查询效率;而索引通过特殊数据结构(如B+树、哈希)优化查询速度,适用于不同场景。文章分析了主键与索引的优劣、适用场景及工作原理,并对比两者在唯一性、数量限制、功能定位等方面的差异,为数据库设计提供指导。
|
存储 缓存 数据库
数据库索引采用B+树不采用B树的原因?
● B+树更便于遍历:由于B+树的数据都存储在叶子结点中,分支结点均为索引,方便扫库,只需要扫一遍叶子结点即可,但是B树因为其分支结点同样存储着数据,我们要找到具体的数据,需要进行一次中序遍历按序来扫,所以B+树更加适合在区间查询的情况,所以通常B+树用于数据库索引。 ● B+树的磁盘读写代价更低:B+树在内部节点上不包含数据信息,因此在内存页中能够存放更多的key。 数据存放的更加紧密,具有更好的空间局部性。因此访问叶子节点上关联的数据也具有更好的缓存命中率。 ● B+树的查询效率更加稳定:由于非终结点并不是最终指向文件内容的结点,而只是叶子结点中关键字的索引。所以任何关键字的查找必须走一条
|
存储 缓存 数据库
数据库索引采用B+树不采用B树的原因?
B+树优化了数据存储和查询效率,数据仅存于叶子节点,便于区间查询和遍历,磁盘读写成本低,查询效率稳定,特别适合数据库索引及范围查询。
212 6
|
存储 缓存 数据库
数据库索引采用B+树不采用B树的原因
B+树相较于B树,在数据存储、磁盘读写、查询效率及范围查询方面更具优势。数据仅存于叶子节点,便于高效遍历和区间查询;内部节点不含数据,提高缓存命中率;查询路径固定,效率稳定;特别适合数据库索引使用。
275 1
|
数据库 索引
数据库索引
数据库索引 1、索引:建立在表一列或多列的辅助对象,目的是加快访问表的数据。 2、索引的优点: (1)、创建唯一性索引,可以确保数据的唯一性; (2)、大大加快数据检索速度; (3)、加速表与表之间的连接; (4)、在查询过程中,使用优化隐藏器,提高系统性能。 3、索引的缺点: (1)、创建和维护索引需要耗费时间,随数据量增加而增加; (2)、索引占用物理空间; (3)、对表的数据进行增删改时,索引需要动态维护,降低了数据的维护速度。
335 2
|
存储 关系型数据库 数据库
Postgres数据库BRIN索引介绍
BRIN索引是PostgreSQL提供的一种高效、轻量级的索引类型,特别适用于大规模、顺序数据的范围查询。通过存储数据块的摘要信息,BRIN索引在降低存储和维护成本的同时,提供了良好的查询性能。然而,其适用场景有限,不适合随机数据分布或频繁更新的场景。在选择索引类型时,需根据数据特性和查询需求进行权衡。希望本文对你理解和使用PostgreSQL的BRIN索引有所帮助。
601 0
|
9月前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
548 158
|
9月前
|
关系型数据库 MySQL 数据库
自建数据库如何迁移至RDS MySQL实例
数据库迁移是一项复杂且耗时的工程,需考虑数据安全、完整性及业务中断影响。使用阿里云数据传输服务DTS,可快速、平滑完成迁移任务,将应用停机时间降至分钟级。您还可通过全量备份自建数据库并恢复至RDS MySQL实例,实现间接迁移上云。
|
9月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS费用价格:MySQL、SQL Server、PostgreSQL和MariaDB引擎收费标准
阿里云RDS数据库支持MySQL、SQL Server、PostgreSQL、MariaDB,多种引擎优惠上线!MySQL倚天版88元/年,SQL Server 2核4G仅299元/年,PostgreSQL 227元/年起。高可用、可弹性伸缩,安全稳定。详情见官网活动页。
1444 152

热门文章

最新文章