solr初印象 转载自《闵晓荣(jarorwar)的博客》

声明:以下为转载的文章,非我的原创,看着好收藏之。

实际的文章出版链接如下

reference:

http://www.jarorwar.com/?p=18

以下是转载的全文

闵晓荣(jarorwar)的博客

行到水穷处,坐看云起时

Solr初印象

作者: minxr 日期: 2011 年 9 月 8 日 发表评论 (0) 查看评论

最近在优化公司的网站搜索程序!之前的程序是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分

posted on 2011-09-22 15:03  lexus 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/lexus/archive/2011/09/22/2185116.html

solr初印象 转载自《闵晓荣(jarorwar)的博客》相关推荐

  1. [转载]一篇经典的求职经历博客,值得深入研究和学习

    一篇经典的求职经历博客,值得深入研究和学习,感谢原创作者分享! 工作刚刚落实,论文也刚完成,终于有时间对自己的求职历程及求职经验进行总结了.应同学要求,最近准备书写系列文章"我的求职历程及经 ...

  2. 转载: 使用vue全家桶制作博客网站 HTML5 移动网站制作的好教程

    使用vue全家桶制作博客网站 前面的话 笔者在做一个完整的博客上线项目,包括前台.后台.后端接口和服务器配置.本文将详细介绍使用vue全家桶制作的博客网站 概述 该项目是基于vue全家桶(vue.vu ...

  3. (转载)云计算系统测试_manok_新浪博客

    云计算系统测试 转载于:http://www.51cto.com/art/201110/295530.htm 云计算系统中大量融入了面向服务的体系结构,用户可以通过该体系结构来实施.部署.执行和管理自 ...

  4. 转载自一个很佩服的大牛博客:孤傲苍狼

    如何在涉世之初少走弯路,有一个好的开端,开始一番成功的事业?以下是一些先行者积累的10条有益的涉世忠告.好好地遵循.把握这些忠告和建议吧,比起所学的课堂课程来,它毫不逊色! 1.1.买个闹钟,以便按时 ...

  5. java 正则表达式 (本文系转载,百度了一下,没找到原博客,或者作者,找了一篇2008年的贴过来了╮(╯▽╰)╭)

    参考文章地址: 一     JAVA 正则表达式 (超详细)   http://blog.csdn.net/allwefantasy/article/details/3136570/  (强烈推荐,有 ...

  6. User Profile Service 服务未能登录转载自(sailing的新浪博客)

    "事件查看器"的"应用程序"一栏中找到大量来源为"Winlogon"和"User Profile Service"的错误 ...

  7. 注意力机制--转载自我的学生隆兴写的博客

    原文链接为:https://a-egoist.com/posts/a44b8419/,学生自己搭建的博客,点赞! 1 Attention 1.1 什么是 Attention 灵长类动物的视觉系统中的视 ...

  8. [转载]荷香如歌_xing2516_新浪博客

    原文地址:荷香如歌作者:松阳中山 荷香如歌 在炎炎的盛夏,我游览了世界上现存最大的古典皇家园林----承德避暑山庄.驻足于风景如画的"知鱼矶"旁,穿过那飘渺如幻的"烟雨楼 ...

  9. 模电学习心得(转载)_史蒂文森sun_新浪博客

    个人建议:认真分析几个典型电路,主要掌握晶体管的等效模型,以及在电路中怎么等效.其他的都很容易解决了.只要会等效了,模电就是完全是电路的内容.其实一点都不可怕,开始不要太关注乱七八糟的内容,抓住主要的 ...

最新文章

  1. iOS逆向(1)——利用ipa重签名,3分钟iPhone安装多个微信
  2. ob_get_contents();basename;file_get_contents用法
  3. 小龙多功能工具箱,邮件群发微信多开
  4. HttpComponents之httpclient基本使用方法
  5. OpenCV 直方图均衡化 equalizeHist
  6. MySQL半一致性读导致语句级Binlog复制错误1111
  7. 【QT】Qaction和触发函数建立连接的方法
  8. [BZOJ1009]GT考试
  9. gopython 获取python 全局线程锁失败_Python之路(第四十三篇)线程的生命周期、全局解释器锁...
  10. HDU1010【走迷宫】Tempter of the Bone-------2015年1月26日
  11. html作业本,连作业本都不用买了!Word做作业本竟这么简单
  12. 全能模拟器retroarch+android,全能模拟器 RetroArch Android
  13. mysql临键锁_innodb临键锁锁定范围
  14. linux查看hostid,lmhostid获取hostid为空问题
  15. python——方便数的据存储模式Bunch
  16. style是什么意思
  17. 一次培训机构的面试经历
  18. 计算机系统的cpu数量,设置cpu核心数量方法,电脑降低cpu处理器数量和内存大小图文教程...
  19. 用Windows7玩游戏?小心你的存档!
  20. 敏捷实施步骤与价值观

热门文章

  1. 【BI数据可视化】使用Docker快速部署Superset
  2. linux 内核 网络设备接口数据结构
  3. linux怎么切换当前用户名,Linux的用户切换、修改用户的用户名和密码
  4. Dapr简单入门(一)
  5. java数据添加千位分隔符
  6. 基于matlab的谐波处理及无功功率补偿源码,《谐波抑制和无功功率补偿(第3版)》...
  7. 什么是Axios ?
  8. SLAM第五讲点云拼接思路笔记
  9. 关于东京奥运会引发的深思和对比
  10. Pocsuite编写ActiveMQ任意文件上传漏洞脚本