2009-10-14 52 views
0

为了使索引保持最新,我需要每5分钟添加/修改一次搜索索引。我设置的方式是使用2个索引,一个位于Full目录中,另一个位于增量目录中,并使用MultiSearcher搜索它们。Lucene.Net使用MultiSearcher时维护索引

我现在正在编写一个过程来维护索引。我正在做的是将最后一个索引日期传递给存储过程,并且数据库根据数据库中的“UpdatedOn”字段返回所有新的/已修改的记录。然后,我循环遍历2个目录,为每个目录打开一个IndexReader并根据主键的TermQuery删除文档。然后,我使用IndexWriter将记录添加到增量索引并对其进行优化。

当我做后续搜索时发生了什么,虽然我知道在索引中的记录没有被返回。

我在做索引维护是否错误?

回答

1

您的{Multi} IndexSearcher是否在搜索界面上被关闭并重新打开?出于性能原因,我已经看到一些应用程序将SearchIndexer对象保存在内存中,以避免每次搜索都重新打开对象及其底层目录的开销,但是,这样做,IndexSearcher不会获取更改/添加到基础指数。

我不确定这是什么在你的情况下 - 但通常当我看到一个搜索器没有拿起新文件,这是因为搜索器被打开之前,项目被添加到索引。 .. 只是一个想法。

+0

是的,我在每次搜索后关闭IndexSearcher。 – druta 2009-10-14 14:37:29