【发布时间】:2013-05-24 10:33:49
【问题描述】:
我正在使用 lucene4.2 并且有一个索引,其文档有超过 50 个字段。 该索引包含大约 80 mio。文件,大小为 11.5 GB。 每次查询超过 20 秒。 像这样:
//Query: +(id:[3000000000000000000 TO 9000000000000000000]) +(devId:2 devId:3)
long start = System.currentTimeMillis();
TopDocs topDocs = indexSearch.search(query,1000);
long end = System.currentTimeMillis();
logger.info(end - start);
当 JVM 堆大小小于 1024M 时会导致 OutOfMemoryError。 我真的很困惑为什么它需要这么多的内存和时间。 怎么做才能在 1 秒内完成搜索?
【问题讨论】:
-
您是如何创建索引的? 80 米。文件是 80、000、000 个文件?如果是这样,1G内存可能不够用。
-
3 quintillion 到 9 quintillion 是一个相当大的范围,我认为会找到很多命中。如果你缩小这个范围,你会看到同样的问题吗?
-
这是我的参数。mergeFactor 100 useCompoundFile false OPenMode.CREATE_OR_APPEND。你的意思是拆分成多个索引会更快? id 不是自动递增的,它是通过当前时间计算的。
-
是的,我缩小了范围,但没有减少搜索时间。
标签: java performance search lucene out-of-memory