为什么不删除未使用的段文件?

时间:2013-03-27 17:08:41

标签: azure lucene.net lucene

我不知道发生了什么变化 - 事情在我们的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中的每个文件复制到缓存目录中。

感谢。

1 个答案:

答案 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