提问者:小点点

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


我不知道发生了什么变化——我们的Lucene实现工作得相对不错。但是现在,索引目录中的文件数量一直在增长。它从_0文件开始,然后出现了_1文件,然后_2和_3文件。如果在开始时该目录中有现有文件,我将false传递给IndexWriter的“创建”参数的构造函数:

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,处理10000个文档,然后释放IndexWriter。索引有效,但文件数量的增长非常糟糕,因为我使用的是AzureDirectory,它在开始Lucene写入之前将每个文件从Azure复制到缓存目录中。

谢谢。


共1个答案

匿名用户

这是正常行为。如果您想要单个索引段,您有一些选择:

  • 使用复合文件
  • 如果您使用LogMergePolicy,则使用1的MergeFactor,这是Lucene 3.0的默认策略。请注意,您在IndexWriter上使用的方法只是调用mergePolicy. MergeFactor的方便方法,只要mergePolicy是LogMergePolicy的实例。
  • 在每次更新索引后运行优化

每次更新后的合并因子和优化都会对应用程序的性能产生严重的影响,这取决于您所做的索引类型。

请参阅此链接,该链接记录了< code>MergeFactor的一些影响:http://Lucene . Apache . org/core/old _ versioned _ docs/versions/3 _ 0 _ 1/API/core/org/Apache/Lucene/index/logmergepolicy . html # set merge factor()