【问题标题】:Lucene Near Realtime SearchLucene 近实时搜索
【发布时间】:2013-10-17 09:56:00
【问题描述】:

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

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

IndexReader newIndexReader = IndexReader.openIfChanged(oldReader);

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

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

【问题讨论】:

    标签: search lucene near-real-time


    【解决方案1】:

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

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

    在我看来,从 writer 打开阅读器在概念上也是错误的(在 Lucene 中曾经有其他情况存在此问题,例如过去可以使用阅读器删除文​​档)。

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

    【讨论】:

    • 您还了解这两种方法的性能吗?
    • 如果底层索引没有改变,IndexReader.openIfChanged(oldReader) 应该更快,因为它是空操作。如果索引已更改,我不确定,需要进行更多研究。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-25
    • 1970-01-01
    • 2011-03-05
    • 2021-01-27
    相关资源
    最近更新 更多