0

我想提高我的搜索系统的速度,通过使用“近实时搜索”等一些功能,加快索引的打开速度。

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

IndexReader newIndexReader = IndexReader.openIfChanged(oldReader);

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

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

4

1 回答 1

2

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

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

根据我的口味,从 writer 中打开 reader 在概念上也是错误的(Lucene 中曾经有其他情况存在此问题,例如过去可以使用 reader 删除文档)。

如果您在两者之间进行选择,我认为使用哪种方法是毫无疑问的。

于 2013-10-17T14:41:34.133 回答