我希望通过使用“近实时搜索”等功能来提高搜索系统的速度,从而加快索引的开放。
谁能告诉我使用以下一段或另外一段代码有什么不同和优点:
IndexReader newIndexReader = IndexReader.openIfChanged(oldReader);
和
IndexWriter writer; // create an IndexWriter here
...
IndexReader reader = writer.getReader();
请注意,在第一种情况下,我不需要indexWriter与IndexReader在同一个进程中。
答案 0 :(得分:2)
首先,writer.getReader()
仅在3.6版本中可用,但在所有v4(4.0,4.1,...)版本中均不存在。因此,如果您关心可维护性,则不应该使用它。
现在,回答你的问题。 writer.getReader()
刷新所有挂起的写入并无条件地打开一个新读者(另外还有一些其他限制 - 请参阅方法javadoc)。如果有任何更改,IndexReader.openIfChanged(oldReader)
只会打开一个新读者,否则会返回旧读者。
根据我的口味,从作家那里打开一个读者也在概念上是错误的(Lucene曾经有过这个问题的其他案例,例如曾经有可能使用读者删除文件)。
如果你在两者之间做出选择,我认为毫无疑问使用哪种方法。