如何在Lucene中将FSdirectory索引文件加载为RAM目录?

时间:2013-07-31 11:02:48

标签: java search lucene indexing

我有一个像FSdirectory一样硬的索引文件,大小约为2GB。我想在ram中加载它以获得更好的搜索速度。我使用后面的代码:

Directory dic=new RAMDirectory(FSDirectory.open(new File("file path")), IOContext.DEFAULT);

但我不确定它是否有效。有谁知道它的工作与否?还有比这更好的其他方法吗?

我会对任何建议感到高兴。谢谢。

1 个答案:

答案 0 :(得分:2)

是的,您可以像这样构建RAMDirectory,但在您的情况下强烈建议不要这样做。 RAMDirectory不适用于大型数据集(超过100MB)。这将是GC密集型,长期构建和消耗宝贵的JAVA堆空间。

如果您遇到性能问题,请确保遵循this lucene FAQ中所述的所有指南

不要忘记,为了获得下降搜索速度,操作系统需要将索引的某些部分缓存到内存中。为此,您必须为操作系统提供一些免费的mem。如果您有16Gb的物理RAM和8gb索引,则应该将jvm Xmx配置为8g。检查mem的一个不错的linux工具是htop,它会将用于进程的RAM打印为绿色(您的堆空间),将RAM用作文件缓存作为黄色(索引数据)。

一些开发人员在应用程序启动时执行预热查询,以防止第一个用户在os filecache加载索引时被卡住几秒钟。

然后,如果你仍然认为你可以获得更好的性能,你可以尝试一些RAMfs的技巧。但是我怀疑你可以获得比MMapDirectory更好的表现更好的表现。