如何创建仅具有一个细分的Lucene索引(不使用强制合并) 我有足够多的RAM,因此我尝试使用1.5GB的缓冲区大小来进行mucj较小的索引(最大64-128MB),但在索引结束时仍然有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);
答案 0 :(得分:1)
当添加的文档足够多时,将触发刷新操作,因为 最后冲洗。文件的RAM使用率触发刷新 (请参阅
IndexWriterConfig.setRAMBufferSizeMB(double)
)或 添加的文档(请参见IndexWriterConfig.setMaxBufferedDocs(int)
)。
这意味着,如果要防止刷新-您需要对这两个值都设置高限制,以确保添加的文档数和RAM使用率都小于您的限制。
另一种方法是在IndexWriterConfig.DISABLE_AUTO_FLUSH
或setMaxBufferedDocs
中传递setRAMBufferSizeMB
以防止由于缓冲的文档数量或RAM使用率而触发刷新。请注意,但是您不能将两个值都设置为DISABLE_AUTO_FLUSH
,并且很可能应该比内存数量更容易计算出文档数量
此外,请确保您对IndexWriter的使用仅在单线程中(或正确同步)
来源:https://lucene.apache.org/core/7_6_0/core/org/apache/lucene/index/IndexWriter.html