用 lucene 建立索引不可能每次都重新开始建立,而是按照新增加的记录,一次次的递增
建立索引的IndexWriter类,有三个参数
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);
分享到:
相关推荐
本文将深入探讨如何利用Lucene实现增量索引,这是一种在数据库或文件系统更新时仅对新数据或变化数据进行索引的技术,以降低资源消耗并保持搜索性能。 **1. Lucene基础知识** Lucene首先需要理解的是它的核心概念,...
在信息检索领域,Lucene是一个广泛使用的全文搜索引擎库,其强大的索引能力和高效的搜索性能为开发者提供了强大的支持。然而,随着数据量的不断增长,如何高效地进行增量索引,即只对新增或更新的数据进行索引,而...
总结,Lucene作为强大的全文搜索引擎,其分词搜索、增量索引和全量索引机制为企业级应用提供了高效的检索解决方案。理解并灵活运用这些概念,能帮助开发者优化系统性能,提升用户体验。在实际应用中,应根据数据规模...
lucene为数据库搜索建立增量索引.txt lucene数据库索引.txt 新闻系统全文检索的思绪.txt lucene学习笔记 1 .txt lucene学习笔记 2.txt lucene学习笔记 3 .txt lucene入门实战.txt Lucene 的学习 .txt ...
Lucene通过建立反向索引,并支持增量索引,极大地提高了索引效率。此外,用户还可以通过控制哪些字段需要索引,哪些字段无需索引,以及是否需要对索引字段进行分词处理,来优化索引策略。 ### 关系型数据库:事务...
对初学使用dotlucent作站内检索的比较有帮助。 利用dotlucene为网站做的索引文件的应用程序。 数据库源是SQL Server,项目是...应用程序界面可以配置数据库链接,生成报告,定时执行增量索引,对单条索引进行更新操作。
我们使用 Oracle 10g 数据库作为数据源,并使用 DIH 和 Delta-importer 工具来实现全量和增量索引。我们的测试结果表明,全量索引和增量索引都可以正确地将数据插入 Solr 索引库中,并且可以实时地更新索引。 结论 ...
- **索引构建**:Lucene支持增量索引和批量索引,可以处理数据源的小幅变化或大规模数据。数据库通常需要全量重建索引,尤其是在数据发生变化时。 - **结果输出**:数据库查询返回RecordSet,而Lucene查询返回Hits...
Solr使用Lucene库作为其核心的索引引擎。索引是通过将文档转换为一系列可搜索的字段来创建的,这些字段包括文本、数字、日期等。索引存储在磁盘上,并且可以被优化以提高查询性能。 2. **增量更新的概念** 增量...
- 增量索引:当新数据到来时,无需重新构建整个索引,而是使用 IndexWriter 的 UpdateDocument 或 AddDocument 方法更新已存在的索引。 - 倒排索引:Lucene 使用倒排索引来加速搜索,每个词项对应一组包含它的文档...
本教程以"跟益达学Solr5之增量索引MySQL数据库表数据"为主题,旨在教授如何利用Solr5来实现对MySQL数据库表数据的增量索引,以便在海量数据中快速检索。 首先,我们需要了解Solr的基本架构。Solr运行在Jetty服务器...
Lucene支持增量索引,意味着可以对新的或已更改的数据进行实时更新。索引优化则是一次性合并多个段(segments)的过程,以提高搜索性能。 5. **搜索结果相关性** Lucene通过TF-IDF(Term Frequency-Inverse ...
此Java源码包提供了一个全面的示例,展示了如何利用Lucene进行索引创建、更新(增量索引)以及搜索操作。在深入探讨之前,我们先了解下Lucene的基本概念。 **Lucene核心概念:** 1. **索引(Indexing)**:Lucene...
通过理解并掌握增量索引、更新索引和删除索引等核心操作,以及与 SQL 数据库的集成,我们可以构建出高效率、高性能的搜索解决方案。在这个实例中,五万多条数据的索引和查询在短时间内完成,充分体现了 Lucene.NET ...
在本项目中,我们使用了Apache LUCENE,这是一个流行的开源全文搜索引擎库,由Java编写,为开发者提供了构建高效、灵活的搜索功能。 LUCENE的主要组成部分包括以下几个核心概念: 1. **索引**:在LUCENE中,索引是...
在索引更新方面,Lucene采用了创新的增量索引策略,通过不断地创建新索引文件并定期合并,避免了因单个大索引文件更新导致的大量IO操作。这种设计提高了索引效率,同时保持了搜索性能的稳定。 总的来说,Lucene是一...
**Lucene的出现的原因和目的** ...总之,Lucene作为一个强大的全文搜索框架,为开发者提供了构建高效搜索引擎的能力,无论是简单的文档检索还是复杂的网络爬虫系统,都能通过Lucene实现高效、精准的搜索功能。
Lucene的索引可以被视为一个数据库,但与传统的关系型数据库不同,它专为全文搜索优化。索引数据库包含以下组件: - **Segment**:索引的基本单位,每个segment是一个独立的、不可变的搜索数据结构。 - **Term ...
搜索引擎的主要任务是建立和维护一个索引库,这个库包含了从各种数据源(如数据库)提取的可搜索信息。索引库提高了数据的检索效率,使得用户能够快速查找所需信息。 3. **dbspider**:虽然未提供具体关于dbspider...