如何创建只包含一个段(不使用强制合并)的Lucene索引--我有超过足够的RAM,所以我尝试使用1.5GB的缓冲区大小来处理高达64-128 10的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);发布于 2019-02-09 09:55:31
当上次刷新后添加了足够多的文档时,就会触发刷新。通过使用文档的RAM (请参阅
IndexWriterConfig.setRAMBufferSizeMB(double))或添加文档的数量(请参阅IndexWriterConfig.setMaxBufferedDocs(int))来触发刷新。
这意味着,如果您想要防止刷新-您需要设置这两个值的上限,以确保添加的文档数量和RAM的使用将少于您的限制。
另一种方法可能是将IndexWriterConfig.DISABLE_AUTO_FLUSH传递到setMaxBufferedDocs或setRAMBufferSizeMB中,以防止由于缓冲文档的数量或内存的使用而触发刷新。请注意,但是您不能将这两个值都设置为DISABLE_AUTO_FLUSH,而且很可能您应该能够更容易地计算出文档数量,而不是内存的数量。
此外,请确保IndexWriter的使用仅在单线程中(或正确同步)。
https://stackoverflow.com/questions/54604689
复制相似问题