利用 Lucene,在创建索引的工程中你可以充分利用机器的硬件资源来提高索引的效率。当你需要索引大量的文件时,你会注意到索引过程的瓶颈是在往磁盘上写索引文件的过程中。为了解决这个问题, Lucene 在内存中持有一块缓冲区。但我们如何控制 Lucene 的缓冲区呢?幸运的是,Lucene 的类 IndexWriter 提供了三个参数用来调整缓冲区的大小以及往磁盘上写索引文件的频率。
1.合并因子(mergeFactor)
这 个参数决定了在 Lucene 的一个索引块中可以存放多少文档以及把磁盘上的索引块合并成一个大的索引块的频率。比如,如果合并因子的值是 10,那么当内存中的文档数达到 10 的时候所有的文档都必须写到磁盘上的一个新的索引块中。并且,如果磁盘上的索引块的隔数达到 10 的话,这 10 个索引块会被合并成一个新的索引块。这个参数的默认值是 10,如果需要索引的文档数非常多的话这个值将是非常不合适的。对批处理的索引来讲,为这个参数赋一个比较大的值会得到比较好的索引效果。
2.最小合并文档数
这个参数也会影响索引的性能。它决定了内存中的文档数至少达到多少才能将它们写回磁盘。这个参数的默认值是10,如果你有足够的内存,那么将这个值尽量设的比较大一些将会显著的提高索引性能。
3.最大合并文档数
这个参数决定了一个索引块中的最大的文档数。它的默认值是 Integer.MAX_VALUE,将这个参数设置为比较大的值可以提高索引效率和检索速度,由于该参数的默认值是整型的最大值,所以我们一般不需要改动这个参数。
/**
* This class demonstrates how to improve the indexing performance
* by adjusting the parameters provided by IndexWriter.
*/
public class AdvancedTextFileIndexer {
public static void main(String[] args) throws Exception{
//fileDir is the directory that contains the text files to be indexed
File fileDir = new File("C:\\files_to_index");
//indexDir is the directory that hosts Lucene's index files
File indexDir = new File("C:\\luceneIndex");
Analyzer luceneAnalyzer = new StandardAnalyzer();
File[] textFiles = fileDir.listFiles();
long startTime = new Date().getTime();
int mergeFactor = 10;
int minMergeDocs = 10;
int maxMergeDocs = Integer.MAX_VALUE;
IndexWriter indexWriter = new IndexWriter(indexDir,luceneAnalyzer,true);
indexWriter.mergeFactor = mergeFactor;
indexWriter.minMergeDocs = minMergeDocs;
indexWriter.maxMergeDocs = maxMergeDocs;
//Add documents to the index
for(int i = 0; i > textFiles[i].getName().endsWith(".txt")){
Reader textReader = new FileReader(textFiles[i]);
Document document = new Document();
document.add(Field.Text("content",textReader));
document.add(Field.Keyword("path",textFiles[i].getPath()));
indexWriter.addDocument(document);
}
}
indexWriter.optimize();
indexWriter.close();
long endTime = new Date().getTime();
System.out.println("MergeFactor: " + indexWriter.mergeFactor);
System.out.println("MinMergeDocs: " + indexWriter.minMergeDocs);
System.out.println("MaxMergeDocs: " + indexWriter.maxMergeDocs);
System.out.println("Document number: " + textFiles.length);
System.out.println("Time consumed: " + (endTime - startTime) + " milliseconds");
}
}
判断索引目录的segments文件是否存在,
如果存在,用增量索引
否则, 重新创建索引
如果是重新创建索引
只需要遍历需要索引的内容,然后新增文档
如果是增量索引
判断主Key[文件名(包含全路径)]在索引中是否存在
如果存在
判断[文件的修改时间],是否和索引中保存的[修改时间]一致
如果不一致
删除旧的索引中的该索引项目
新增对该文档的索引
否则
新增该文档的索引 缺点,不能发现已经删除的文件,当然是认为的去某个目录删除该文件。
如果是程序的话当然是可以的,只需要把索引中的项目删除。
分享到:
相关推荐
**基于Lucene技术的增量索引** 在信息技术领域,全文搜索引擎是处理大量数据查询的关键工具。Apache Lucene是一个开源的全文检索库,被广泛应用于构建高效、可扩展的搜索功能。本文将深入探讨如何利用Lucene实现...
《深入理解Lucene5增量索引与Zoie系统》 在信息检索领域,Lucene是一个广泛使用的全文搜索引擎库,其强大的索引能力和高效的搜索性能为开发者提供了强大的支持。然而,随着数据量的不断增长,如何高效地进行增量...
《Lucene分词搜索、增量索引与全量索引详解》 在现代信息检索系统中,搜索引擎扮演着至关重要的角色。Apache Lucene是一个高性能、全文本搜索库,被广泛应用于构建复杂的数据检索应用。本文将深入探讨Lucene的分词...
而在Lucene中,基本单位是Document,它同样由多个字段组成,但Lucene索引的是这些字段的内容,以加速文本检索。 - **索引构建**:Lucene支持增量索引和批量索引,可以处理数据源的小幅变化或大规模数据。数据库通常...
1. **打开索引目录**:与创建索引类似,先打开索引所在的目录。 2. **创建分词器**:同样需要一个分词器来处理查询字符串。 3. **创建索引读取器**:`IndexReader`用于读取索引,从中获取文档信息。 4. **创建...
**Lucene索引详解** Lucene是Apache软件基金会的一个开源全文搜索引擎库,它提供了一种高效、可扩展的全文检索框架。作为一个纯Java库,Lucene可以被集成到任何Java应用中,帮助开发者轻松实现搜索功能。在深入理解...
1. Lucene索引原理:Lucene使用倒排索引结构,将文档中的词项与包含这些词项的文档进行关联。每个词项都有一个词典,词典包含了词项的位置信息和对应的文档频率。 2. 倒排索引的构建:索引过程包括分析...
Solr 数据库插入全量和增量索引 Solr 是一个基于 Lucene 的搜索引擎,可以快速高效地对大量数据进行索引和查询。在实际应用中,我们需要将数据插入 Solr 索引库中,以便实现高效的搜索功能。本文将详细介绍 Solr ...
三、判断合并条件与合并策略 Lucene会定期检查当前索引中是否有需要合并的段,这一过程涉及到对SegmentInfos的检查。一旦发现有多个相邻的、大小相当的段,就会启动归并过程。归并策略的核心是通过比较各段的第一个...
Solr使用Lucene库作为其核心的索引引擎。索引是通过将文档转换为一系列可搜索的字段来创建的,这些字段包括文本、数字、日期等。索引存储在磁盘上,并且可以被优化以提高查询性能。 2. **增量更新的概念** 增量...
除了倒排索引,Lucene还支持增量索引,这意味着可以只对文档的更改部分进行索引更新,而不是重新对整个文档集进行索引,从而节省资源并提高效率。 然而,尽管Lucene提供了强大的索引能力,但在实际应用中,随着索引...
Lucene通过建立反向索引,并支持增量索引,极大地提高了索引效率。此外,用户还可以通过控制哪些字段需要索引,哪些字段无需索引,以及是否需要对索引字段进行分词处理,来优化索引策略。 ### 关系型数据库:事务...
- 这个工具能够有效地合并多个Lucene索引文件,并且支持更多的合并选项。 4. **避免使用复合文件**: - 在某些情况下,使用复合文件可能会导致索引合并出现问题。为了避免这种情况,可以在配置文件中显式地禁用...
- 增量索引:当新数据到来时,无需重新构建整个索引,而是使用 IndexWriter 的 UpdateDocument 或 AddDocument 方法更新已存在的索引。 - 倒排索引:Lucene 使用倒排索引来加速搜索,每个词项对应一组包含它的文档...
Lucene支持增量索引,意味着可以对新的或已更改的数据进行实时更新。索引优化则是一次性合并多个段(segments)的过程,以提高搜索性能。 5. **搜索结果相关性** Lucene通过TF-IDF(Term Frequency-Inverse ...
本资料旨在介绍Lucene在构建索引、增量归并、查找定位等方面的关键算法,帮助读者更深入地理解其工作原理。 首先,我们来看单个索引的构建过程中涉及的快速排序算法。快速排序是一种高效的排序算法,其核心思想是...
二、Lucene索引流程 1. 文档分词:Lucene使用Analyzer对输入的文档进行分词,生成Token流。 2. 字符串到Term:将分词结果转化为Term对象,每个Term代表一个唯一的词汇项。 3. 建立Term Frequency(TF):记录每个...
另外,可以利用Lucene的近实时搜索特性,通过NRTManager(Near Real Time Search Manager)实现快速的增量索引和查询。 除了上述基础配置,还可以扩展Lucene的功能,如使用Filter进行结果过滤,使用Highlighter高亮...
对初学使用dotlucent作站内检索的比较有帮助。 利用dotlucene为网站做的索引文件的应用程序。 数据库源是SQL Server,项目是...应用程序界面可以配置数据库链接,生成报告,定时执行增量索引,对单条索引进行更新操作。
lucene为数据库搜索建立增量索引.txt lucene数据库索引.txt 新闻系统全文检索的思绪.txt lucene学习笔记 1 .txt lucene学习笔记 2.txt lucene学习笔记 3 .txt lucene入门实战.txt Lucene 的学习 .txt ...