0

我不知道发生了什么变化——我们的 Lucene 实现运行得相对较好。但是现在,索引目录中的文件数量一直在增长。它从 _0 个文件开始,然后出现 _1 个文件,然后是 _2 和 _3 个文件。如果开始时该目录中存在现有文件,我将 false 传递给 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,它将 Azure 中的每个文件复制到缓存目录中,然后再开始 Lucene 写入。

谢谢。

4

1 回答 1

2

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

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

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

请参阅此链接,其中记录了一点效果MergeFactor: http: //lucene.apache.org/core/old_versioned_docs/versions/3_0_1/api/core/org/apache/lucene/index/LogMergePolicy.html#setMergeFactor%28% 29

于 2013-03-27T19:25:02.717 回答