Lucene.Net - 如何删除.csf文件?

时间:2011-12-22 12:23:18

标签: c# lucene.net

我正在使用Lucene.Net版本2.9.4.1 这是我的搜索服务:

public class FooSearchServiceLucene : IFooSearchService
{
    private readonly Directory dir;
    private readonly IndexWriter indexWriter;
    private readonly IPersonRepository personRepository;

    public PersonSearchServiceLucene(string luceneIndexDir, IFooRepository fooRepository)
    {
        this.fooRepository = fooRepository;

        dir = FSDirectory.Open(new System.IO.DirectoryInfo(luceneIndexDir));
        indexWriter = new IndexWriter(dir, new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_29),
                                        IndexWriter.MaxFieldLength.UNLIMITED);
    }
    ...
    public void RebuildSearchIndex()
    {
        // delete all documents
        indexWriter.DeleteAll();
        indexWriter.Commit();

        // create a new index
        var items = fooRepository.GetAll();
        foreach (var item in items)
        {
            AddDocument(person);
        }

        indexWriter.Commit();
    }
}

这个FooSearchServiceLucene是一个单身人士,因为我一次只能有一个IndexWriter,我正在使用Near real time search功能。 当我调用RebuildSearchIndex方法时,所有.del文件都将被删除,旧的搜索细分仍将存在于文件系统中,并且会创建新的搜索细分?

我的磁盘空间正在快速增长。如何在不重新启动.cfs的情况下删除旧的IIS文件?

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

如果您想将所有文档放在一个段中,则必须调用IndexWriter.Optimize()。请注意,此调用可能需要一段时间,并且会占用大量资源,因此您只应在网站流量较低时调用它。

此外,如果在调用Optimize / Commit时在索引文件上打开了IndexSeacher,Lucene将无法删除这些文件。您必须在RebuildSearchIndex方法中优化/提交之前关闭搜索器。