声明:以下为转载的文章,非我的原创,看着好收藏之。
实际的文章出版链接如下
reference:
Solr初印象
最近在优化公司的网站搜索程序!之前的程序是hibernate search写的,Hibernate Search是基于lucene,经Hibernate包装而成!用Hibernate Search 你既有用Hibernate的感觉,又可以来添加Lucene的强大功能!使用Hibernate Search的另一个优点是,如果你使用的Hibernate进行持久化操作,那么索引几乎是实时进行建立的。这个无比的爽啊!(当然抛出数据库了,就直 接用lucene了。)
但是,我们现在的程序对库的操作是用dephil端操作的,所以用hibernatesearch并没有解决更新即建索引的问题,建立索引还是需要自己定时增量去建的!
现有的操作是:spring定时任务每半个小时调用增量索引的建立过程,在建立索引的过程中,对已经建立的数据进行了记录,作为日志写入到数据库。 下次从数据库中读取建立索引的位置,建立增量索引。每天晚上凌晨建立一次全量索引(建立索引的过称中清空日志表重新进行记录!)。
现有的程序并没有什么不妥,现在看起来,也并没有无可厚非之处(个人观点,如果大家有更好的建议,请留言讨论)。但是搜索效果,索引的实时性,以及搜索的效果,对顾客的引导性等方面也存在很多问题。所以需要对程序进行优化。
优化之前进行了很多选择,从zoie的实时索引,到bobo-browse的分类搜索。再到最后选择的solr。对这三者进行简单的分析吧。纯属个人见解,不正确支出请大家指出:
1、zoie:zoie是linkedin公司开发的一个实时的索引系统,其原理主要是多线程对索引的实时建立和合并。达到了所谓真正的实时索引!linkedin公司一直也在使用此程序。还是很不错的。
但是zoie的学习曲线比较大,作者去了个貌似中文的名字,但是没有任何的中文文档,甚至连英文文档也非常至少!另外需要自己实现的地方比较多,如果不是非常了解其内部结构,实现起来有一定的难度!所以,笔者在学习了一段时间后,暂时性的放弃了!
2、bobo-browse:是一个用来进行搜索的程序包,其封装了lucene的搜索api,加入了facet实现了分类统计,分段搜索等功能。 其可以结合zoie或者solr等进行使用!是搜索层面非常不错的工具选择!bobo-browse的实现相对来说比较完善了,只要经过简单的配置即可使 用。同样,其文档相对较少。好在源代码比较少,如果真有兴趣,可以好好研究一番源代码。
3、solr:其实在研究solr前,翻阅过好多资料。一个搜索程序重要的无非有三点:
A、索引。如果没有索引,那么你搜什么,所以索引非常重要!这就表现在索引的实时性,分词算法、索引 域(field)的设计等。要使用将索引真正的研究透,最好达到,你看到一个词,就知道他会被索引成什么样,搜什么和什么会出现此匹配项,搜什么不会出 现。当然这个有点夸张,但是我的建议是,我们最好能一边看着索引结果,一边来构建我们的程序。查看索引结果的最好工具就是luke了。
B、搜索。出了索引之外,那么搜索就是非常重要的一个环节,一个索引无论建立的多好,但是搜索程序没有 设计好,就是怎么也搜不出来,好比茶壶里煮饺子。故而搜索程序异常的重要。好的搜索好比好的语言组织能力,而索引就是词汇,只有将这些词汇进行合适的组织 之后,才会形成优美的文章、诗词。
C、界面。好多人看到此处不禁纳闷,既然索引、搜索都做到完美了。那么界面真的有这么重要么?答案只有一个:非 常重要!这里所说的界面的重要性,不是说我们要界面ui做的多么的花哨,多么的漂亮。这里主要是指界面的内容,以及不同内容的显示区域,要尽量的简洁明 了。让用户第一眼就能找到他想要的东西,而不是让用户猜测你会把这个东西放在那里,另外ui的设计一定要考虑受众的习惯。
综合以上三点,选择了solr,solr在索引方面可以做到准实时,另外,solr支持分布式的部署,可以部署两台,一台提供索引服务,一台提供搜 索服务。同时solr的索引建立也异常的方便,不管是对数据库还是对文本文件,抑或对网站站点建立索引。其次,solr的搜索程序也非常的友好,通过 http协议加参数,您就可以获取您想要的结果。结果可以被以不同的形式返回(json ,xml等).方便了我们在前台的处理。最后就是我要讲的最重要的界面了,solr自带的demo程序中的browse界面就是一个典型的范例,如果有对 搜索程序界面该如何设计有疑问的话,建议参考或者模仿此界面做一下。因为本人觉得确实不错。包括那个基于jquery的自动提示功能,都是非常好的范例。
最后还有一点重要的忘了讲了,solr的后台程序”solr/admin”提供了非常好的工具,可以进行搜索,进行分词的查看等。是一个不错的管理端。另外solr可以灵活的配置分词程序,不同的field可以完全采用不同的分词器,方面了我们的个性化需求。
最令人兴奋的是solr的wiki写的非常好,如果你耐心去“啃”,一定会“嚼”出味道和营养来!
总之,solr就是个万花筒,如果你尽情的研究,他就会尽情的绽放,你少许的付出,他就会加倍的回报,不会让你失望!如果你发现solr并不能完全满足你,那么你可以自己开发代码来帮助你完成工作。基于solr的开发也是非常容易上手的。
最后告诉大家一个小秘密,因为solr是基于http协议进行数据交互的,索引无论什么语言,都可以使用solr并且将solr融合到自己的程序中哦。
最近研究solr的简单总结————————————————————–闵晓荣 2011-09-08晚 23:45分