我不知道发生了什么变化 - 事情在我们的Lucene实施中运作得相当好。但现在,索引目录中的文件数量不断增长。它以_0文件开头,然后出现_1文件,然后是_2和_3文件。我将错误传递给IndexWriter的'create'参数的构造函数,如果该目录中的现有文件开始时存在:
indexWriter = new IndexWriter(azureDirectory, analyzer, (azureDirectory.ListAll().Length == 0), IndexWriter.MaxFieldLength.UNLIMITED);
if (indexWriter != null)
{
// Set the number of segments to save in memory before writing to disk.
indexWriter.MergeFactor = 1000;
indexWriter.UseCompoundFile = false;
indexWriter.SetRAMBufferSizeMB(800);
...
indexWriter.Dispose(); indexWriter = null;
}
也许它与使用UseCompoundFile标志有关?
每隔几分钟,我创建一个新的IndexWriter,处理10,000个文档,然后处理IndexWriter。索引有效,但文件数量越来越大,因为我使用的是AzureDirectory,它在开始Lucene写入之前将Azure中的每个文件复制到缓存目录中。
感谢。
答案 0 :(得分:2)
这是正常行为。如果您想要单个索引段,则可以选择以下选项:
LogMergePolicy
,则使用MergeFactor为1,这是lucene 3.0的默认策略。请注意,只要mergePolicy是IndexWriter
的实例,您在LogMergePolicy
上使用的方法只是一种调用mergePolicy.MergeFactor的便捷方法。每次更新后的低合并因素和优化可能会严重影响应用的性能,这取决于您的索引类型。
请参阅此链接,其中列出了MergeFactor
的一些影响:
http://lucene.apache.org/core/old_versioned_docs/versions/3_0_1/api/core/org/apache/lucene/index/LogMergePolicy.html#setMergeFactor%28%29