当我的文件集合更新后,我想搜索最新的数据......
喜欢Windows高级搜索选项。
答案 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
,可能比关闭和重新开启要快一些。