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();
}
}
}
我可以删除文档,但索引文件大小不会减少,尤其是_a.fdt,_a_Lucene41_0.pos。
在删除_a.fdt大小10037kb之前,删除所有文档后,大小是相同的。
请帮忙吗?
答案 0 :(得分:0)
Lucene针对搜索速度进行了优化。
重新组织文件以回收由删除释放的空间需要磁盘I / O,这是一项非常昂贵的操作(与RAM和从磁盘读取文件相比)。因此,当您从索引中删除文件时,这并不能告诉Lucene执行此(昂贵的)重组。
要释放空间,您可以使用基本上释放磁盘空间的expungeDeletes()
,或者optimize()
,这会花费更多精力,可以提高搜索性能。
答案 1 :(得分:0)
解决!我在
writer.forceMergeDeletes()
之后使用writer.deleteUnusedFiles()
,然后删除除segments_c
和segment_gen
之外的所有文件。