为了使我的索引保持最新,我需要每5分钟添加/修改一次搜索索引。我设置它的方式是使用2个索引,一个在Full目录中,一个在Incremental目录中,并且搜索它们我使用的是MultiSearcher。
我现在正在编写一个维护索引的流程。我正在做的是将最后一个索引日期传递给存储过程,并且DB基于DB中的“UpdatedOn”字段返回所有新的/修改的记录。然后我遍历2个目录,为每个目录打开一个IndexReader,并根据主键的TermQuery删除文档。然后,我使用IndexWriter将记录添加到增量索引并进行优化。
当我进行后续搜索时发生的事情是我知道在索引中的记录没有被返回。
我做错了索引维护吗?
答案 0 :(得分:1)
您的{Multi} IndexSearcher是否在搜索界面上关闭并重新打开?出于性能原因,我已经看到一些应用程序将SearchIndexer对象保留在内存中,以避免每次搜索都重新打开对象及其底层目录的开销,但是,这样做,IndexSearcher不会获取更改/添加内容到底层索引。
我不确定这是不是在你的情况下是什么 - 但通常当我看到一个搜索者没有拿起新文件时,这是因为搜索者在项目被添加到索引之前被打开了。只是一个想法。