1.使用单例模式IndexReader,IndexWriter
2.当删除和添加多个Document对象时,最好进行批量处理。这样做的速度总是比交替的删除和添加操作的速度快得多
3.排序对搜索速度影响还是很大的,尽可能不要使用多个排序条件。
建议:采用默认的积分排序,设计良好的加权机制
4.过滤器采取的是对搜索结果的再处理方式,会使程序的性能显著下降,一般推荐使用BooleanQuery组合更多的搜索条件来达成效果。
5.将索引库载入内存,以提高搜索速度。
6.优化索引很简单,一个writer.Optimize()搞定,优化过程会降低索引的效率,优化结果提高搜索性能。不要时时Optimize(),优化一次就够了。
批量向 FSDirectory 增加索引时,增大合并因子(mergeFactor )和最小文档合并数(minMergeDocs)有助于提高性能,减少索引时间。
7.正确使用Field的存储和索引属性组合
8.通过RAMDirectory缓写提高性能<br>我们可以先把索引写入RAMDirectory,达到一定数量时再批量写进FSDirectory,减少磁盘IO次数
9.选择较好的分析器,这个优化主要是对磁盘空间的优化,可以将索引文件减小将近一半,相同测试数据下由600M减少到380M。但是对时间并没有什么帮助,甚至会需要更长时间,因为较好的分析器需要匹配词库,会消耗更多cpu,测试数据用StandardAnalyzer耗时133分钟;用MMAnalyzer耗时150分钟。
10.尽量降低时间精度,将精度由秒换成天带来的性能提高甚至比使用cache还好,最好不使用filter。
在不能降低时间精度的情况下,使用cache能带了10倍左右的性能提高。
参考文献:
http://www.madcn.net/?p=639 狂人居
http://blog.csdn.net/zfrong/archive/2009/01/16/3794999.aspx