需求

我们在大量的数据(至少百万/千万级),且这些数据若一旦形成结构化数据,这些数据的改动也非常小。若在这堆数据中,存在多分类多聚合多条件的检索需求,若还在用数据库检索,那么无疑会耗费大量的时间/资源来实现,这时候就需要一个检索引擎来优化,solr就是其中一个选择。

电商搜索案例

电商搜索案例的需求为:使用Solr实现电商网站中的商品信息搜索功能,可以根据关键字、分类、价格搜索商品信息,也可以根据价格进行排序,最后要达成的效果如下图所示。
初识 - 图1

实现方法

一些大型门户网站、电子商务网站等都需要站内搜索功能,使用传统的数据库查询方式实现搜索无法满足一些高级的搜索需求,比如:搜索速度要快、搜索结果按相关度排序、搜索内容格式不固定等,所以,这里就需要使用全文检索技术实现搜索功能了。

使用Lucene实现

单独使用Lucene实现站内搜索需要开发的工作量较大,主要表现在:索引维护、索引性能优化、搜索性能优化等,因此不建议采用。

使用Solr实现

基于Solr实现站内搜索扩展性较好并且可以减少程序员的工作量,因为Solr提供了较为完备的搜索引擎解决方案,因此在门户、论坛等系统中常用此方案。

什么是Solr?

上面通过一个电商搜索案例引出了Solr了,那么Solr到底是个什么东东呢?Solr是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务器。Solr提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展,并对索引、搜索性能进行了优化。
Solr可以独立运行,它可运行在Jetty(Solr内置的小服务器,类似于一个小型Tomcat服务器)、Tomcat等这些Servlet容器中。Solr索引的实现方法很简单,用POST方法向Solr服务器发送一个描述Field及其内容的XML文档,Solr根据XML文档添加、删除、更新索引。Solr搜索只需要发送HTTP GET请求,然后对Solr返回XML、JSON等格式的查询结果进行解析,组织页面布局。另外,Solr不提供构建UI的功能,它只提供了一个管理界面,通过管理界面可以查询Solr的配置和运行情况。

Solr与Lucene的区别

介绍完Solr,我们之前也学习过Lucene,那它俩之间到底有啥区别呢?Solr与Lucene的区别为:Lucene是一个开放源代码的全文检索引擎工具包,它不是一个完整的全文检索引擎,Lucene提供了完整的查询引擎和索引引擎,目的是为软件开发人员提供一个简单易用的工具包,以方便地在目标系统中实现全文检索的功能,或者以Lucene为基础构建全文检索引擎;而Solr的目标是打造一款企业级的搜索引擎系统,它是一个搜索引擎服务,可以独立运行,通过Solr可以非常快速的构建企业的搜索引擎,通过Solr也可以高效的完成站内搜索功能。
初识 - 图2
最后,问大家一个问题,Solr是数据库吗?它是数据库,数据库是一个总称,什么叫数据库啊?能持久化数据的地方就叫数据库,只是数据库又分为了关系型数据库(例如Oracle和MySQL)、非关系型数据库(例如Redis)以及全文检索数据库。