如何创建只有一个段的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使用率都小于您的限制。
另一种方法是在setMaxBufferedDocs
或setRAMBufferSizeMB
中传递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