精华帖 (0) :: 良好帖 (0) :: 新手帖 (3) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-07-26
lishuaibt 写道 # TopDocs tdoc = searcher.search(query, 100);
# for (ScoreDoc scoreDoc : tdoc.scoreDocs) { # Document doc = searcher.doc(scoreDoc.doc); # } # searcher.close(); # indexFSDir.close(); IndexReader的open操作是比较耗时的操作,如果没有索引的变更,是没有必要这么频繁的close()后重新open的,重用IndexReader对象,会减少很所不必要的重复加载,比如SegementInfo的加载等操作。。。。 我不是用的for,从代码可看出。 当每次索引后立即执行搜索方法,则搜索时间短。而如果将索引方法注释在执行main时,搜索方法用时长。你说indexReader每次打开操作比较耗时,但我每次都是同样的打开关闭,时间应在相同的一个范围内,而不会相差这么远啦。 为什么第一次执行速度明显比后面的快很多呢?我执行了十几次都是这样的。 |
|
返回顶楼 | |
发表时间:2010-07-26
不清楚楼主的测试。我把你的代码拷贝下来再公司里的机器测试。先把那两个文件夹建立好。然后按你说的运行。相差不过几十毫秒
|
|
返回顶楼 | |
发表时间:2010-07-26
yangfuchao418 写道 不清楚楼主的测试。我把你的代码拷贝下来再公司里的机器测试。先把那两个文件夹建立好。然后按你说的运行。相差不过几十毫秒
?很神奇呀。 |
|
返回顶楼 | |
发表时间:2010-07-27
难道是IO缓存? 操作系统的Cache。。
|
|
返回顶楼 | |
发表时间:2010-07-27
我也想用在自己的项目中,测试过,速度很快的,上G的还没测试过,晚上回去试试,明天再跟贴!
|
|
返回顶楼 | |
发表时间:2010-07-27
个人感觉不要去太追求速度了,lucene是一个很成熟的解决方案,给我们应用开发提供了很多方便。可以用jprofiler去跑一下程序,看看性能参数。搜索的话可以用缓存加以优化(例如enhcache或memcached等)提高查询速度等。
|
|
返回顶楼 | |
发表时间:2010-08-04
应该还是没有使用好lucene,不会这么慢的。
|
|
返回顶楼 | |