用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);
目录
相关文章
|
20天前
|
数据库 索引
深入探索数据库索引技术:回表与索引下推解析
【10月更文挑战第15天】在数据库查询优化的领域中,回表和索引下推是两个核心概念,它们对于提高查询性能至关重要。本文将详细解释这两个术语,并探讨它们在数据库操作中的作用和影响。
43 3
|
20天前
|
数据库 索引
深入理解数据库索引技术:回表与索引下推详解
【10月更文挑战第23天】 在数据库查询性能优化中,索引的使用是提升查询效率的关键。然而,并非所有的索引都能直接加速查询。本文将深入探讨两个重要的数据库索引技术:回表和索引下推,解释它们的概念、工作原理以及对性能的影响。
41 3
|
5天前
|
数据库 索引
数据库索引
数据库索引 1、索引:建立在表一列或多列的辅助对象,目的是加快访问表的数据。 2、索引的优点: (1)、创建唯一性索引,可以确保数据的唯一性; (2)、大大加快数据检索速度; (3)、加速表与表之间的连接; (4)、在查询过程中,使用优化隐藏器,提高系统性能。 3、索引的缺点: (1)、创建和维护索引需要耗费时间,随数据量增加而增加; (2)、索引占用物理空间; (3)、对表的数据进行增删改时,索引需要动态维护,降低了数据的维护速度。
17 2
|
1月前
|
存储 关系型数据库 MySQL
Mysql(4)—数据库索引
数据库索引是用于提高数据检索效率的数据结构,类似于书籍中的索引。它允许用户快速找到数据,而无需扫描整个表。MySQL中的索引可以显著提升查询速度,使数据库操作更加高效。索引的发展经历了从无索引、简单索引到B-树、哈希索引、位图索引、全文索引等多个阶段。
61 3
Mysql(4)—数据库索引
|
16天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
82 1
|
10天前
|
存储 关系型数据库 数据库
Postgres数据库BRIN索引介绍
BRIN索引是PostgreSQL提供的一种高效、轻量级的索引类型,特别适用于大规模、顺序数据的范围查询。通过存储数据块的摘要信息,BRIN索引在降低存储和维护成本的同时,提供了良好的查询性能。然而,其适用场景有限,不适合随机数据分布或频繁更新的场景。在选择索引类型时,需根据数据特性和查询需求进行权衡。希望本文对你理解和使用PostgreSQL的BRIN索引有所帮助。
17 0
|
17天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第26天】数据库作为现代应用系统的核心组件,其性能优化至关重要。本文主要探讨MySQL的索引策略与查询性能调优。通过合理创建索引(如B-Tree、复合索引)和优化查询语句(如使用EXPLAIN、优化分页查询),可以显著提升数据库的响应速度和稳定性。实践中还需定期审查慢查询日志,持续优化性能。
47 0
|
9天前
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
23 4
|
7天前
|
SQL 关系型数据库 MySQL
12 PHP配置数据库MySQL
路老师分享了PHP操作MySQL数据库的方法,包括安装并连接MySQL服务器、选择数据库、执行SQL语句(如插入、更新、删除和查询),以及将结果集返回到数组。通过具体示例代码,详细介绍了每一步的操作流程,帮助读者快速入门PHP与MySQL的交互。
22 1
|
18天前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。
本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。同时,文章还对比了编译源码安装与使用 RPM 包安装的优缺点,帮助读者根据需求选择最合适的方法。通过具体案例,展示了编译源码安装的灵活性和定制性。
60 2