Indexing 为什么删除不能减少lucene中的索引文件大小?
我可以删除文档,但索引文件大小不会减小,尤其是_a.fdt,_a_Lucene41_0.pos 在删除\u a.fdt大小10037kb之前,删除所有文档之后,大小相同Indexing 为什么删除不能减少lucene中的索引文件大小?,indexing,document,Indexing,Document,我可以删除文档,但索引文件大小不会减小,尤其是_a.fdt,_a_Lucene41_0.pos 在删除\u a.fdt大小10037kb之前,删除所有文档之后,大小相同 请帮助?Lucene在搜索速度方面进行了优化 重新组织文件以回收删除释放的空间需要磁盘I/O,这是一项非常昂贵的操作(与RAM和从磁盘读取文件相比)。因此,当你从索引中删除一个文件时,这并没有告诉Lucene进行这种(昂贵的)重组 要释放空间,您可以使用基本上释放磁盘空间的expungeDeletes(),或者需要更多努力的op
请帮助?Lucene在搜索速度方面进行了优化 重新组织文件以回收删除释放的空间需要磁盘I/O,这是一项非常昂贵的操作(与RAM和从磁盘读取文件相比)。因此,当你从索引中删除一个文件时,这并没有告诉Lucene进行这种(昂贵的)重组 要释放空间,您可以使用基本上释放磁盘空间的
expungeDeletes()
,或者需要更多努力的optimize()
,可能会提高搜索性能。OP写道:
解决了!。我在writer.deleteunsedfiles()
之后使用writer.forceMergeDeletes()
,然后它删除除segments\u c
和segment\u gen
之外的所有文件
解决了的!。我在writer.deleteunsedfiles()之后使用writer.forceMergeDeletes(),然后它会删除除segments_c和segments_gen之外的所有文件。使用这些方法是否正确?我无法使用这些方法。因为lucene版本不支持这些方法。无论如何,谢谢你
IndexWriter writer = null;
try {
Directory dir = FSDirectory.open(new File(path));
Analyzer analyzer = new StandardAnalyzer(LUCENE_VERSION);
IndexWriterConfig iwc = new IndexWriterConfig(LUCENE_VERSION, analyzer);
iwc.setRAMBufferSizeMB(getIndexRamBufferSizeMB());
iwc.setOpenMode(OpenMode.CREATE_OR_APPEND);
writer = new IndexWriter(dir, iwc);
Term term = new Term(request.getIndexKeyName(), String.valueOf(request.getId()));
writer.deleteDocuments(term);
writer.deleteUnusedFiles();
} catch (Exception e) {
e.printStackTrace();
}
finally {
if (writer != null) {
try {
writer.commit();
writer.close(true);
} catch (Exception e1) {
e1.printStackTrace();
}
}
}