仅使用一个细分创建Lucene索引

时间:2019-02-09 08:51:27

标签: java indexing lucene

如何创建仅具有一个细分的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);

1 个答案:

答案 0 :(得分:1)

  

当添加的文档足够多时,将触发刷新操作,因为   最后冲洗。文件的RAM使用率触发刷新   (请参阅IndexWriterConfig.setRAMBufferSizeMB(double))或   添加的文档(请参见IndexWriterConfig.setMaxBufferedDocs(int))。

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

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

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

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