第九篇:搭建Solr服务
前言:
我们前面已经介绍了如何用利用redis使用缓存效果来提高我们访问的效率,减少用户的等待时间和数据库的访问。下面要介绍的搜索系统的搭建。
1.搜索工程的搭建
image.png以前我们说过,每个系统都是单一只能的原则,搜索也不例外。为什么我们搜索也要单独出来呢 ?我们来看看京东的搜索可以发现地址栏是发生改变的了。
image.pngimage.png
科普时间
Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的返回结果。
Solr是一个高性能,采用Java5开发,基于Lucene的全文搜索服务器。同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎。
对于淘淘商城来讲,由于网上商城的搜索频率特别高,我们很有必要把搜索单独做成一个服务,这样做的好处是可以针对该服务做扩展,做成服务集群等。其它模块都可以调用solr服务。
1.1搭建Solr服务
首先来看看我们搭建Solr服务所需要的环境配置:
- Solr是java开发的,因此需要安装jdk。我用的1.7
- Solr安装在Linux环境中,这里用的是虚拟机Centos6.5。
-
需要安装Tomcat
搭建步骤:
1.把文件上传到Linux中
image.png
2.解压
tar -zxvf solr-4.10.3.tgz.tgz -C /usr/local/
3.安装Tomcat
网上教程很多~这里不再赘述;解压完成后在/usr/local下创建一个solr目录
mkdir /usr/local/solr
然后将解压后的tomcat赋值一份到solr目录下
cp -r apache-tomcat-7.0.47 /usr/local/solr/tomcat
4.将solr和Tomcat结合
我们将solr的war包放到tomcat的webapps目录下并命名为solr.war
cp /usr/local/solr-4.10.3/dist/solr-4.10.3.war /usr/local/solr/tomcat/webapps/solr.war
然后解压solr.war
bin/startup.sh
我们可以用tailf logs/catalina.out命令查看启动日志
下面我们删掉solr.war,但是前提是先关闭掉tomcat,然后再删除(如果不关闭tomcat就删除solr.war的话,solr文件夹也会被删除)
bin/shutdown.sh
rm -rf solr.war
下面我们将example/lib/ext目录下的所有jar包拷贝到/usr/local/solr/tomcat/webapps/solr/WEB-INF/lib/目录下
cp /usr/local/solr-4.10.3/example/lib/ext/* /usr/local/solr/tomcat/webapps/solr/WEB-INF/lib/
将example目录下的solr文件夹复制到/usr/local/solr/目录下并且重命名为solrhome,如下所示
cp -r example/solr /usr/local/solr/solrhome
5.关联solr及solrhome。需要修改solr工程的web.xml文件。
6.启动tomcat
bin/startup.sh
7.测试
在浏览器中输入访问地址
image.png
如果访问不了记得关掉防火墙!!!
2.配置业务域
2.1首先由于在Solr中默认是没有中文分析器的,需要手工配置,配置一个FieldType,在FieldType中指定中文分析器。另外,Solr中的字段必须先定义,后使用。
1.将压缩包上传到solr服务上
2.安装zip和unzip命令(如果有请忽略~)
yum install zip unzip
3.解压
unzip IKAnalyzer2012FF_hf1.zip
4.解压完后看看里面的东西有啥~
其中我们需要里面的jar包。
我们把jar包添加到solr工程中
cp IKAnalyzer2012FF_u1.jar /usr/local/solr/tomcat/webapps/solr/WEB-INF/lib
5.把扩展词典、配置文件放到solr工程的WEB-INF/classes目录下
cp IKAnalyzer.cfg.xml ext_stopword.dic mydict.dic /usr/local/solr/tomcat/webapps/solr/WEB-INF/classes
6.配置fieldType
我们需要在solrhome/collection1/conf/schema.xml中配置,所以先找到这个文件
image.png
7.编辑schema.xml
使用Shit+G到文件末尾,加上以下配置
<fieldType name="text_ik" class="solr.TextField">
<analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>
8.配置业务字段
我们需要在schema.xml中配置的字段有
1、商品Id
2、商品标题
3、商品卖点
4、商品价格
5、商品图片
6、分类名称
7、商品描述
在末尾中继续添加
<field name="item_title" type="text_ik" indexed="true" stored="true"/>
<field name="item_sell_point" type="text_ik" indexed="true" stored="true"/>
<field name="item_price" type="long" indexed="true" stored="true"/>
<field name="item_image" type="string" indexed="false" stored="true" />
<field name="item_category_name" type="string" indexed="true" stored="true" />
<field name="item_desc" type="text_ik" indexed="true" stored="false" />
<field name="item_keywords" type="text_ik" indexed="true" stored="false" multiValued="true"/>
<copyField source="item_title" dest="item_keywords"/>
<copyField source="item_sell_point" dest="item_keywords"/>
<copyField source="item_category_name" dest="item_keywords"/>
<copyField source="item_desc" dest="item_keywords"/>
我们可以看到上面有一段是复制域即item_keywords,复制域的好处是可以调高查询效率,原本可能要查询多个字段,现在只需要查询一个字段就可以了(因为都把所有内容放在一个域里面了,所以查询很方便!)
9.重启tomcat
image.png
看到这些就成功了!