一、搜索技术
1.1、什么是搜索
简单的说,搜索就是搜寻、查找,在IT行业中就是指用户输入关键字,通过相应的算法,查询并返回用户所需要的信息。
1.2、普通的数据库搜索
类似:select * from 表名 where 字段名 like ‘%关键字%’
例如:select * from article where content like ’%here%’
结果: where here shere
1.3、百度的搜索
从结果可以看出,百度搜索具备以下明显特点:
1、即使在相关结果数量接近500万时,也能快速得出结果。
2、搜索的结果不仅仅局限于完整的“吃饭睡觉篮球”这一短语,而是将此短语拆分成,“篮球”,“吃饭”,“睡觉”,等关键字。
3、对拆分后的搜索关键字进行标红显示。
4、.......
1.4、普通的数据库搜索的缺陷
类似:select * from 表名 where 字段名 like ‘%关键字%’
例如:select * from article where content like ’%here%’
结果: where here shere
1、因为没有通过高效的索引方式,所以查询的速度在大量数据的情况下是很慢。
2、搜索效果比较差,只能对用户输入的完整关键字首尾位进行模糊匹配。用户搜索的结果误多输入一个字符,可能就导致查询出的结果远离用户的预期。
二、搜索技术
2.1、企业搜索技术选型
在一些大型门户网站、电子商务网站等都需要站内搜索功能,使用传统的数据库查询方式实现搜索无法满足一些高级的搜索需求,比如:搜索速度要快、搜索结果按相关度排序、搜索内容格式不固定等,这里就需要使用全文检索技术实现搜索功能。
2.2、单独使用Lucene实现
单独使用Lucene实现站内搜索需要开发的工作量较大,主要表现在:索引维护、索引性能优化、搜索性能优化等,因此不建议采用。
2.3、使用Google或Baidu接口
通过第三方搜索引擎提供的接口实现站内搜索,这样和第三方引擎系统依赖紧密,不方便扩展,不建议采用。
2.4、使用Solr实现
基于Solr实现站内搜索扩展性较好并且可以减少程序员的工作量,因为Solr提供了较为完备的搜索引擎解决方案,因此在门户、论坛等系统中常用此方案。
三、Solr
3.1、什么是solr
Solr 是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务器。Solr提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展,并对索引、搜索性能进行了优化,Solr可以独立运行在 Jetty、Tomcat 等 Servlet 容器中,Solr 索引的实现方法很简单,用 POST 方法向 Solr 服务器发送一个描述 Field 及其内容的 XML 文档,Solr根据xml文档添加、删除、更新索引 。Solr 搜索只需要发送 HTTP GET 请求,然后对 Solr 返回 Xml、json 等格式的查询结果进行解析,组织页面布局。Solr不提供构建UI的功能,Solr提供了一个管理界面,通过管理界面可以查询Solr的配置和运行情况。solr是基于lucene开发企业级搜索服务器,实际上就是封装了lucene。
Solr 是一个独立的企业级搜索应用服务器,它对外提供类似于 Web-service的API 接口。用户可以通过 http 请求,向搜索引擎服务器提交一定格式的文件,生成索引;也可以通过提出查找请求,并得到返回结果。调用接口,实现增加,修改,删除,查询索引库。
3.2、solr特性
- 高级的全文搜索功能
- 专为高通量的网络流量进行的优化
- 基于开放接口(xml和http)的标准
- 综合的html管理界面
- 可伸缩性-能够有效地复制到另外一个Solr搜索服务器
- 使用xml配置达到灵活性和适配性
- 可扩展的插件体系
3.3、Solr与Lucene的区别
Lucene是一个开放源代码的全文检索引擎工具包,它不是一个完整的全文检索引擎,Lucene提供了完整的查询引擎和索引引擎,目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者以Lucene为基础构建全文检索引擎。
Solr的目标是打造一款企业级的搜索引擎系统,它是一个搜索引擎服务,可以独立运行,通过Solr可以非常快速的构建企业的搜索引擎,通过Solr也可以高效的完成站内搜索功能。
Solr与Lucene 并不是竞争对立关系,恰恰相反Solr 依存于Lucene,因为Solr底层的核心技术是使用Lucene 来实现的,Solr和Lucene的本质区别有以下三点:搜索服务器,企业级和管理。Lucene本质上是搜索库,不是独立的应用程序,而Solr是。Lucene专注于搜索底层的建设,而Solr专注于企业应用。Lucene不负责支撑搜索服务所必须的管理,而Solr负责。所以说,一句话概括 Solr: Solr是Lucene面向企业搜索应用的扩展。
四、Solr安装
4.1、环境准备
我们在Linux下安装solr,需要有JDK和Tomcat环境,可以自行百度如何安装。
4.2、安装solr
4.2.1、上传安装包并解压
将solr的安装包上传到linux的/usr/local目录下,并解压
[root@my121 local]# tar -zxvf solr-5.5.5.tgz
4.2.2、部署
这里是将solr部署到Tomcat上
1)把solr-5.5.5下面的server下面的solr-webapp下面的webapp复制到tomcat的webapps下,改名为solr(随便起名)
mv webapp solr
cp -r webapp/ /root/usr/java/apache-tomcat-8.5.31/webapps/
2)把solr-5.5.5下面的server下面的lib下面的ext下面的所有jar 全部复制到 Tomcat\ webapps\solr\WEB-INF\lib 目录中
cp * /root/usr/java/apache-tomcat-8.5.31/webapps/solr/WEB-INF/lib/
3)将 solr 压缩包中 solr-5.5.5/server/resources /log4j.properties 复制到Tomcat\ webapps\solr\WEB-INF\lib 目录中
cp log4j.properties /root/usr/java/apache-tomcat-8.5.31/webapps/solr/WEB-INF/lib/
4)关联solr及solrhome。需要修改solr工程的web.xml文件
我这里放到了/var/solr/home/solr/目录下
5)修改tomcat的web.xml
编辑这个文件
[root@my121 home]# vi /usr/local/tomcat8/webapps/solr/WEB-INF/web.xml
解开注释 把solrhome路径放进去
4.2.3、启动访问
启动tomcat,在没浏览器输入网址http://my121:8080/solr/admin.html即可访问
五、添加core
在管理界面添加core时失败了,这时候需要去/var/solr/home/solr/下面创建一个文件夹。我的文件夹叫做new_core
然后把解压后的solr文件夹中的/usr/local/solr-5.5.5/server/solr/configsets/sample_techproducts_configs/conf/复制到new_core中
重启Tomcat之后,重新创建
六、配置中文分词器
Solr支持的分词器有很多比如:smartcn,IK等,我们这里使用IK分词器。
6.1、下载IK分词器
http://pan.baidu.com/s/1o7P0846
6.2、配置
1)把jar包复制到tomcat/webapp/solr/WEB-INF/lib里面。(千万不要复制到tomcat/lib中,这样会找不到lucene的类)
2)打开solrHome/core1/conf/managed-schema文件,在最下方,追加如下配置
<fieldType name="text_ik" class="solr.TextField">
<analyzer type="index" useSmart="false"
class="org.wltea.analyzer.lucene.IKAnalyzer" />
<analyzer type="query" useSmart="true"
class="org.wltea.analyzer.lucene.IKAnalyzer" />
</fieldType>
6.3、测试
重新启动tomcat,查看分词
注意:IK分词器只支持UTF-8格式,所以不要使用Windows下的记事本编写数据