Lucene.Net是否允许同时进行搜索和索引?

时间:2010-09-01 06:13:21

标签: wpf lucene.net

当我的文件集合更新后,我想搜索最新的数据......

喜欢Windows高级搜索选项。

3 个答案:

答案 0 :(得分:2)

来自Lucene FAQ

  

Lucene是否允许同时搜索和索引?

     

是。但是,IndexReader仅在打开时的“时间点”搜索索引。在重新打开IndexReader之前,对索引的任何更新(添加或删除的文档)都不可见。因此,您的应用程序必须定期重新打开其IndexReaders以查看最新更新。 IndexReader.isCurrent()方法允许您测试自IndexReader打开以来是否对索引进行了任何更新。

不可否认,这是对Java版本的引用,但我希望.NET版本的工作方式相同。

答案 1 :(得分:1)

这本书“Lucene in Action,第二版”有一个关于近实时搜索的部分。基本上,您通过调用IndexWriter.GetReader()方法获取IndexReader并保存它。开始搜索时,调用IndexWriter.GetReader()并将返回的阅读器与保存的值进行比较。如果它是相同的,只需使用现有的阅读器。多个线程可以共享同一个阅读器。

如果不同,请关闭旧阅读器并保存新阅读器。使用保存的值进行搜索。

在幕后,新阅读器包含索引中所有待处理(未提交)的文档。待处理的更改将刷新到磁盘(或RamDirectory),但不会提交。

答案 2 :(得分:0)

是的,您可以同时搜索和索引。您需要考虑的唯一事情是,当您打开IndexReader时,它基本上需要索引的“快照”:您需要关闭并重新打开IndexReader以获取任何新更新(或调用reopen,可能比关闭和重新开启要快一些。