Lucene近实时搜索

时间:2013-10-17 09:56:01

标签: search lucene near-real-time

我希望通过使用“近实时搜索”等功能来提高搜索系统的速度,从而加快索引的开放。

谁能告诉我使用以下一段或另外一段代码有什么不同和优点:

IndexReader newIndexReader = IndexReader.openIfChanged(oldReader);

IndexWriter writer; // create an IndexWriter here
...
IndexReader reader = writer.getReader();

请注意,在第一种情况下,我不需要indexWriter与IndexReader在同一个进程中。

1 个答案:

答案 0 :(得分:2)

首先,writer.getReader()仅在3.6版本中可用,但在所有v4(4.0,4.1,...)版本中均不存在。因此,如果您关心可维护性,则不应该使用它。

现在,回答你的问题。 writer.getReader()刷新所有挂起的写入并无条件地打开一个新读者(另外还有一些其他限制 - 请参阅方法javadoc)。如果有任何更改,IndexReader.openIfChanged(oldReader)只会打开一个新读者,否则会返回旧读者。

根据我的口味,从作家那里打开一个读者也在概念上是错误的(Lucene曾经有过这个问题的其他案例,例如曾经有可能使用读者删除文件)。

如果你在两者之间做出选择,我认为毫无疑问使用哪种方法。