创建仅包含一个段的 Lucene 索引



如何创建只有一个段的Lucene索引(不使用强制合并(我有足够的 RAM,所以我尝试使用 1.5GB 缓冲区大小来存储高达 64-128MB 的 mucj 较小索引,但在索引结束时仍有 5-10 段。我能做些什么呢?

public static final double DEFAULT_RAM_BUFFER_SIZE_MB_STORE = 1536.;
...
final File file = new File(pathIndex);
final Path path = file.toPath();
final Directory index = ControlObjectsLuceneIndex.createDirectory(path, file);
final IndexWriterConfig indexWriterConfig = new IndexWriterConfig(analyzer);
indexWriterConfig.setRAMBufferSizeMB(defaultRamBufferSizeMb);
indexWriterConfig.setSimilarity(_ekspertSimilarity);
indexWriterConfig.setUseCompoundFile(false);
return new IndexWriter(index, indexWriterConfig);

当有足够的添加文档时,将触发刷新,因为 最后一次同花顺。刷新由文档的 RAM 使用触发 (见IndexWriterConfig.setRAMBufferSizeMB(double)(或数量 添加了文档(请参阅IndexWriterConfig.setMaxBufferedDocs(int)(。

这意味着,如果要防止刷新 - 则需要对这两个值设置上限,以确保添加的文档数和RAM使用率都小于您的限制。

另一种方法是在setMaxBufferedDocssetRAMBufferSizeMB中传递IndexWriterConfig.DISABLE_AUTO_FLUSH 以防止由于缓冲文档数量或 RAM 使用率而触发刷新。请注意,但是您不能将两个值都设置为DISABLE_AUTO_FLUSH,并且很可能您应该能够比RAM量更容易地计算出文档数量

此外,请确保 IndexWriter 的使用仅在单线程中使用(或正确同步(

来源: https://lucene.apache.org/core/7_6_0/core/org/apache/lucene/index/IndexWriter.html

最新更新