把lucene索引放在内存中提供查询服务
200W以下的数据量全部加载到内存最简单的方式是修改Lucene(1.9版本)源码 org.apache.lucene.index.IndexReader文件的第127行 将
return open(FSDirectory.getDirectory(path, false), true);
修改为
return open(new RAMDirectory(FSDirectory.getDirectory(path, false)), true);
将133行的
return open(FSDirectory.getDirectory(path, false), true);
修改为
return open(new RAMDirectory( FSDirectory.getDirectory(path, false)), true);
这样就可以在查询的时候将所有索引一次加载到内存,查询响应时间即使是第一次查询,也会小于0.1秒,但仅适用于索引文档数量不超过200W个,并且平均的页面大小不超过10K,文献检索系统 ,这种方式尤其适合。
创建索引的时候也能够使用 RAMDirectory , 比FSDirectory 要快很多 。
令一种方法:
FSDirectory directory = FSDirectory.getDirectory(args[0], false); 1
RAMDirectory directory = new RAMDirectory(args[0]); 2
用2代替1即可