我使用Lucene搜索引擎来索引一些地址数据。我使用MMapDirectory
来存储索引。现在我想在创建新缓存时使用旧缓存。我是否需要将旧缓存复制到另一个目录中?或者有没有什么好方法可以做到这一点?我想知道create
构造函数中的IndexWriter
参数是否因为这个原因而完成,但实际上并不知道如何正确使用它并且是否提供“实时搜索”。
答案 0 :(得分:2)
如果您的问题是:我可以使用IndexWriter更新现有索引,而IndexSearchers会在修改之前搜索当前索引,答案是肯定的。
在IndexWriter.Commit()之前打开的IndexSearchers将看到修改之前的索引,只有在Commit之后打开的IndexSearchers会看到更改。IndexWriter上的create参数只是告诉它创建Directory,如果它不存在,它也会覆盖指定位置的现有索引。
对于实时搜索,可以使用IndexWriter.GetIndexReader()方法创建/刷新搜索者,同时尽可能长时间地打开IndexWriter。
作为旁注,与使用Lucene.net的SimpleFSDirectory相比,MMapDirectory总是有不好的表现,我认为它甚至没有在2.9.4.1版本中实现。我不建议使用它。