2009-08-18 46 views

回答

16

有沒有辦法將索引保存在RAM中而不是保存在硬盤上?

使用RAMDirectory

SampleUsage here

從Lucene的常見問題

ImproveSearchingSpeed

也普遍更快的索引性能最好用RAM使用而不是文檔計數進行刷新,並儘可能使用RAM緩衝區。

Also check this question:

編輯:RE:RamDirectory,由於API說RamDirectory是內存駐留目錄執行。,由目錄指定,只保留那些指數RAM RAMDirecory

RE:緩存在我的知識,Lucene的通過過濾器請看看@CachingWrapperFilter手段和QueryWrapperFilter

+0

謝謝非常感謝您的詳細解答。我還有兩個問題。 首先,我讀了Lucene緩存,這將保持部分索引在RAM中。但是RAMDirectory是不同的,對吧?它是否保留了RAM中的所有索引? 其次,我看到了setRAMBufferSizeMB,我的理解是,它是爲了加快索引而不是搜索。它是否也加快了搜索速度? – elif 2009-08-19 08:08:01

+0

oops,將編輯我的文章 – Narayan 2009-08-19 08:24:13

+0

從「ImproveSearchingSpeed」:「使用readOnly = true打開IndexReader」,您知道如何在Lucene 4+中執行此操作嗎?我找不到任何例子... – Gevorg 2013-09-23 23:12:49

1

RAM磁盤可能是解決方案。迷你HOWTO可在http://www.vanemery.com/Linux/Ramdisk/ramdisk.html獲得。將RAM磁盤掛載爲索引目錄,並且應該完成。

+0

需要注意的是緩存搜索結果大索引,「硬件」RAM磁盤也可用...基本上與硬盤驅動器接口的設備,但填充DRAM而不是盤片。 – erickson 2009-08-18 16:03:51

+0

謝謝你的回答。我們考慮過。但我們傾向於不使用該選項,因爲我們在操作系統中沒有那麼多的經驗。我們認爲這會降低我們的控制力,減少觀察/監測指數的能力。 – elif 2009-08-19 08:01:56

1

查看RAMDirectory文檔。這是一個basic usage example。這隻有在索引足夠小的情況下才有效。

+0

並感謝您的回答。 什麼尺寸會很小? 該指數約爲20 MB,我們預計它不會增長超過5倍。這足夠小嗎? – elif 2009-08-19 08:04:01

+0

不客氣。 100 MB的確足夠小。您仍然應該考慮在適當的JVM堆棧大小設置下使用磁盤索引。這樣可以避免在重新啓動應用程序時重新編制索引,並且可能與RAMDirectory一樣快。另見: http://www.lucidimagination.com/Community/Hear-from-the-Experts/Articles/Scaling-Lucene-and-Solr關於搜索速度。 – 2009-08-19 09:03:21

+0

爲什麼重新編制索引當我重新啓動應用程序?我以爲我可以使用RAMDirectory將硬盤上的索引讀入RAM中。每次我想將索引讀入RAM時,是否必須重新索引? 謝謝你的鏈接。 – elif 2009-08-20 10:24:09

相關問題