2010-09-01 67 views

回答

0

是的,你可以同時搜索和索引。您需要考慮的唯一一件事情是,當您打開IndexReader時,它基本上需要索引的「快照」:您需要關閉並重新打開IndexReader以獲取任何新更新(或致電reopen,這可能比關閉和重新開放)。

+0

可以在優化索引編寫器後更新文檔 – Deepak 2010-09-01 06:24:24

+0

是的,所有優化都是重新排列磁盤上的文件以便更快訪問。它不會以任何方式更改索引的「邏輯」佈局。 – 2010-09-01 06:26:36

+0

感謝您的分享 – Deepak 2010-09-01 06:31:09

2

Lucene FAQ

不Lucene的允許同時搜索和索引?

是的。但是,IndexReader只會在索引中搜索它打開的「時間點」。在IndexReader重新打開之前,對索引的任何更新(添加或刪除的文檔)都將不可見。因此,您的應用程序必須定期重新打開其IndexReaders以查看最新更新。 IndexReader.isCurrent()方法允許您測試索引讀取器打開後是否發生了任何索引更新。

不可否認,這是對Java版本的引用,但我期望.NET版本以同樣的方式工作。

1

這本書,「Lucene在行動,第二版」有一個關於近實時搜索的部分。基本上,你通過調用IndexWriter.GetReader()方法來獲得IndexReader並保存它。開始搜索時,調用IndexWriter.GetReader()並將返回的閱讀器與保存的值進行比較。如果相同,只需使用現有的閱讀器即可。多個線程可以共享同一個閱讀器。

如果不同,請關閉舊閱讀器並保存新閱讀器。使用保存的值進行搜索。

在幕後,新讀者包括索引中的所有待處理(未提交)文檔。待處理的更改將刷新到磁盤(或RamDirectory),但未提交。