【问题标题】:Faster search in Lucene - Is there a way to keep the whole index in RAM?在 Lucene 中更快的搜索 - 有没有办法将整个索引保存在 RAM 中?
【发布时间】:2010-11-20 13:43:05
【问题描述】:

有没有办法将索引保存在 RAM 中而不是保存在硬盘上?

我们希望加快搜索速度。

【问题讨论】:

    标签: search lucene full-text-indexing


    【解决方案1】:

    RAM 磁盘可能是解决此问题的方法。迷你 HOWTO 可在http://www.vanemery.com/Linux/Ramdisk/ramdisk.html 获得。挂载 RAM 盘作为你的索引目录,你应该完成了。

    【讨论】:

    • 请注意,对于大型索引,也可以使用“硬件”RAM 磁盘...基本上是带有硬盘接口的设备,但填充的是 DRAM 而不是盘片。
    • 感谢您的回答。我们考虑过。但是我们倾向于不使用该选项,因为我们在操作系统方面没有太多经验。我们认为它会减少我们对索引的控制和观察/监控的能力。
    【解决方案2】:

    查看RAMDirectory 文档。这是basic usage example。这仅在索引足够小的情况下才有效。

    【讨论】:

    • 感谢您的回答。什么尺寸会小?该索引约为 20 MB,我们预计它不会增长超过 5 倍。这够小吗?
    • 不客气。 100 MB 确实足够小。您仍然应该考虑使用具有正确 JVM 堆栈大小设置的磁盘索引。这将使您在重新启动应用程序时不必重新索引,并且可能与 RAMDirectory 一样快。另请参阅:lucidimagination.com/Community/Hear-from-the-Experts/Articles/… 关于搜索速度。
    • 为什么我重新启动应用程序时它会重新索引?我想我可以使用 RAMDirectory 将硬盘上的索引读入 RAM。每次我想将索引读入 RAM 时都必须重新索引吗?谢谢你的链接。
    • 你是对的。可以从硬盘读取:lucene.apache.org/java/2_4_1/api/org/apache/lucene/store/…
    【解决方案3】:

    有没有办法将索引保存在 RAM 中而不是保存在硬盘上?

    使用 RAMDirectory

    使用示例here

    同样来自 Lucene 常见问题

    ImproveSearchingSpeed

    一般来说,为了更快的索引性能,最好根据 RAM 使用情况而不是文档计数来刷新,并尽可能使用大的 RAM 缓冲区。

    Also check this question:

    编辑: RE: RamDirectory,正如 API 所说,RamDirectory 是内存驻留的目录实现。,它只保留那些索引由目录 RAMDirecory

    指定的 RAM

    RE:缓存 据我所知,Lucene 通过过滤器缓存搜索结果,请查看@CachingWrapperFilterQueryWrapperFilter

    【讨论】:

    • 非常感谢您的详细解答。我还有两个问题。首先,我读到 Lucene 进行缓存,这会将索引部分保留在 RAM 中。但是 RAMDirectory 是不同的,对吧?它是否将所有索引都保存在 RAM 中?其次,我看到了setRAMBufferSizeMB,我的理解是它是为了加快索引而不是搜索。它是否也加快了搜索速度?
    • From "ImproveSearchingSpeed": "Open the IndexReader with readOnly=true",你知道如何在 Lucene 4+ 中做到这一点吗?我找不到任何示例...
    猜你喜欢
    • 2019-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-27
    • 1970-01-01
    相关资源
    最近更新 更多