我正在使用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
文件?
非常感谢任何帮助!
答案 0 :(得分:0)
如果您想将所有文档放在一个段中,则必须调用IndexWriter.Optimize()。请注意,此调用可能需要一段时间,并且会占用大量资源,因此您只应在网站流量较低时调用它。
此外,如果在调用Optimize / Commit时在索引文件上打开了IndexSeacher,Lucene将无法删除这些文件。您必须在RebuildSearchIndex方法中优化/提交之前关闭搜索器。