Indexing 为什么删除不能减少lucene中的索引文件大小?

Indexing 为什么删除不能减少lucene中的索引文件大小?,indexing,document,Indexing,Document,我可以删除文档,但索引文件大小不会减小,尤其是_a.fdt,_a_Lucene41_0.pos 在删除\u a.fdt大小10037kb之前,删除所有文档之后,大小相同 请帮助?Lucene在搜索速度方面进行了优化 重新组织文件以回收删除释放的空间需要磁盘I/O,这是一项非常昂贵的操作(与RAM和从磁盘读取文件相比)。因此,当你从索引中删除一个文件时,这并没有告诉Lucene进行这种(昂贵的)重组 要释放空间,您可以使用基本上释放磁盘空间的expungeDeletes(),或者需要更多努力的op

我可以删除文档,但索引文件大小不会减小,尤其是_a.fdt,_a_Lucene41_0.pos

在删除\u a.fdt大小10037kb之前,删除所有文档之后,大小相同


请帮助?

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();
            }
        }
    }