Solr是基于Lucene开发的全文检索服务器,而Lucene就是一套实现了全文检索的api,其本质就是一个全文检索的过程。全文检索就是把原始文档根据一定的规则拆分成若干个关键词,然后根据关键词创建索引,当查询时先查询索引找到对应的关键词,并根据关键词找到对应的文档,也就是查询结果,最终把查询结果展示给用户的过程。
2.Solr,Solrj,Spring Data Solr的区别联系
Solr是一套全文检索技术,Solrj是官方提供的api,Spring Data Solr是为了方便Solr开发的一个集成到Spring中的框架,他的底层是对Solrj的封装
3.在项目中为什么会用到Solr?同类型的技术还有什么?各自的优缺点是什么?应用场景分别是什么?
当我们在项目中使用搜索功能的时候,如果不用任何的全文检索技术,那么就是相当于直接在数据库中进行查询,如果只是一些数据量比较小的项目的话,那无所谓;但是如果是数据量比较大或者并发量比较大的项目的话,那数据库肯定会承受不住这种负担而崩掉的;另外,我们的大部分查询基本上都是Like查询,这更加地消耗性能。所以,基于上面的这些原因,我们在项目中就引进了全文检索的技术。
目前关于全文检索的技术,用的最多的有solr和elasticsearch两种,他们都是基于Lucene进行开发的。其中solr是Apache的一个项目,由java编写的,比较成熟了;elasticsearch(以下简称ES)是由Shay Banon一个人开发出来的,是一个实时的分布式搜索和分析引擎。
ElasticSearch VS Solr 总结
(1)es基本是开箱即用,非常简单。Solr安装略微复杂一点
(2)Solr 利用 Zookeeper 进行分布式管理,而 Elasticsearch 自身带有分布式协调管理功能。
(3)Solr 支持更多格式的数据,比如JSON、XML、CSV,而 Elasticsearch 仅支持json文件格式。
(4)Solr 官方提供的功能更多,而 Elasticsearch 本身更注重于核心功能,高级功能多有第三方插件提供,例如图形化界面需要kibana友好支撑
(5)Solr 查询快,但更新索引时慢(即插入删除慢),用于电商等查询多的应用;
ES建立索引快(即查询慢),即实时性查询快,用于facebook新浪等搜索。
Solr 是传统搜索应用的有力解决方案,但 Elasticsearch 更适用于新兴的实时搜索应用。
(6)Solr比较成熟,有一个更大,更成熟的用户、开发和贡献者社区,而 Elasticsearch相对开发维护者较少,更新太快,学习使用成本较高
当单纯的对已有数据进行搜索时,Solr更快。(电商中的商品都是已有数据,可能这也是很多电商项目选择solr的原因)
当实时建立索引时, Solr会产生io阻塞,查询性能较差, Elasticsearch具有明显的优势
随着数据量的增加,Solr的搜索效率会变得更低,而Elasticsearch却没有明显的变化
Solr的使用案例:
(1)淘宝用过
(2)京东
(3)YY
(4)56视频
ES的使用案例:
(1)维基百科,类似百度百科,牙膏,牙膏的维基百科,全文检索,高亮,搜索推荐
(2)The Guardian(国外新闻网站),类似搜狐新闻,用户行为日志(点击,浏览,收藏,评论)+社交网络数据(对某某新闻的相关看法),数据分析,给到每篇新闻文章的作者,让他知道他的文章的公众反馈(好,坏,热门,垃圾,鄙视,崇拜)
(3)Stack Overflow(国外的程序异常讨论论坛),IT问题,程序的报错,提交上去,有人会跟你讨论和回答,全文检索,搜索相关问题和答案,程序报错了,就会将报错信息粘贴到里面去,搜索有没有对应的答案
(4)GitHub(开源代码管理),搜索上千亿行代码
(5)电商网站,检索商品
(6)日志数据分析,logstash采集日志,ES进行复杂的数据分析(ELK技术,elasticsearch+logstash+kibana)
(7)商品价格监控网站,用户设定某商品的价格阈值,当低于该阈值的时候,发送通知消息给用户,比如说订阅牙膏的监控,如果高露洁牙膏的家庭套装低于50块钱,就通知我,我就去买
(8)BI系统,商业智能,Business Intelligence。比如说有个大型商场集团,BI,分析一下某某区域最近3年的用户消费金额的趋势以及用户群体的组成构成,产出相关的数张报表,**区,最近3年,每年消费金额呈现100%的增长,而且用户群体85%是高级白领,开一个新商场。ES执行数据分析和挖掘,Kibana进行数据可视化
(9)国内:站内搜索(电商,招聘,门户,等等),IT系统搜索(OA,CRM,ERP,等等),数据分析(ES热门的一个使用场景)
5.如何使用Solr?
Solr的使用主要分为两步: