Lucene真的是一个很强大的东东。把索引和检索这么复杂的处理,抽象出来,包装成一个库,提供几个简单地接口就可以搞定很多事情。其接口的简洁和优雅,非常值得我们去学习。

相对于其他的开源库,Lucene的各种开发文档,还算比较丰富。《Lucene in Action》(其中文版,我查阅各大书店都没找到,看来买的很火爆)这本书上面也把各种示例讲的比较详细。但要想用好,仍然不是件容易的事情。有许多tricky的地方。需要针对自己的需求,采取一些优化的手段。这样就不得不读这两篇文章:
ImproveIndexingSpeed
ImproveSearchingSpeed

就在Lucene官方站点的wiki里面找到的。嗯,谨记!一定要多读官方文档。在网上搜寻各种优化策略,大致脱离不来这两篇文章中总结的几个要点。我对其中“在搜索中多用filter”体会颇深。

在我的搜素第一跑起来时,那个慢啊,搜索一个结果比较多的内容,需要2秒左右,非常吓人。经分析和测试在知道,时间都耗费在我的Collector器中的collect(id, score)中。因为我在其中做了很多通过id获取文档内容,在根据其中字段的值来过滤id的操作。这样导致每。获取一个id,就需要去获取整个文档的内容,然后取出某个域的内容来做过滤逻辑。如果搜索词有上万的结果的话,这个操作就非常吓人。而把这些过滤利用filter来做,速度一下子就上来了,每个查询就在几毫秒级。虽然好像还是不够理想,但暂时已经足够用了。进一步的优化可以放在后面来做。

另外很都时候需要搜索数据库的很多个字段,这样每个字段去建立一个域,然后去每个字段搜素一遍,也是很不靠谱的事情。第二篇中就清晰地指出:多域查找,在建立索引的时候放在一起,而且存储属性设置为不存储。这样既可以提高搜索效率,又对索引的大小没影响。非常好使。

Tags: ,.
首页

No Comments Now!

Be the first to comment on this entry.

请您留下评论

名称(必填)
Mail (必填),(will not be published)
网站(recommended)

Fields in bold are required. Email addresses are never published or distributed.

Some HTML code is allowed:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>
URLs must be fully qualified (eg: http://www.hongzhixiong.com),and all tags must be properly closed.

Line breaks and paragraphs are automatically converted.

Please keep comments relevant. Off-topic, offensive or inappropriate comments may be edited or removed.