一、前言
@H_502_3@在上一篇博客中,小编向大家深入的介绍了一下搜索引擎,稍微提出了Solr。封装及扩展性较好,提供了较为完备的解决方案,因此在门户社区中采用此方案,后期加入Compass方案。 基于这些性能优势,在一些门户网站上,使用Solr进行站内搜索还是比较高效的。下面就向大家介绍一下如何搭建一个单机版的Solr服务。二、环境介绍
三、搭建过程
3.0 上传文件
@H_502_3@上传如下文件,到usr/local/src下:3.1 安装jdk
@H_502_3@a、下载jdk并上传到/usr/java目录 @H_502_3@jdk7下载地址为:http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html 选择对应的linux版本,下载rpm文件。这里选择的是jdk-7u79-linux-x64.rpm。在usr下建立java文件夹,并上传到Linux的/usr/java目录下(java目录不存在则进行创建)。 @H_502_3@b、解压安装 @H_502_3@运行如下命令进行解压rpm -ivh 文件名称
vim /etc/profile@H_502_3@内容添加到profile文件末尾并保存
@H_301_76@export JAVA_HOME=/usr/java/jdk1.8.0_131
@H_301_76@export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
@H_301_76@export PATH=$PATH:$JAVA_HOME/bin
source /etc/profile
@H_502_3@检查jdk是否安装成功,运行如下命令
java -version
3.2 安装tomcat
@H_502_3@解压tomcattar -zxf apache-tomcat-7.0.47.tar.gz
@H_502_3@在usr/local路径下建立solr/tomcat文件夹,向/usr/local/solr/tomcat中拷贝一份tomcat
cp apache-tomcat-7.0.47 /usr/local/solr/tomcat -r
3.3 解压solr压缩包
@H_502_3@解压solrtar -zxf solr-4.10.3.tgz.tgz
@H_502_3@把dist/solr-4.10.3.war部署到tomcat下。
@H_301_76@cp solr-4.10.3.war /usr/local/solr/tomcat/webapps/solr.war
3.4 启动tomcat解压拷贝的war包
@H_502_3@启动tomcat解压拷贝的war包,注意: tomcat 运行的前提是要有jdk./startup.sh
3.5 需要把/root/solr-4.10.3/example/lib/ext目录下的所有的jar包添加到solr工程中
cp * /usr/local/solr/tomcat/webapps/solr-4.10.3/WEB-INF/lib/ -r
3.6 创建solrhome
@H_502_3@把/root/solr-4.10.3/example/solr文件夹复制一份作为solrhome。 @H_502_3@创建solrhomecp -r solr /usr/local/solr/solrhome
Solrconfig.xml 定义了所有的handeler
3.7 修改tomcat下solr的web.xml
@H_502_3@告诉solr服务solrhome的位置。需要修改web.xml3.8 配置中文分析器
@H_502_3@a.把IKAnalyzer依赖的jar包添加到solr工程中。把分析器使用的扩展词典添加到classpath中。@H_301_76@cp IKAnalyzer2012FF_u1.jar /usr/local/solr/tomcat/webapps/solr/WEB-INF/lib/
@H_502_3@b.需要自定义一个FieldType。Schema.xml中定义。可以在FieldType中指定中文分析器。
<fieldType name="text_ik" class="solr.TextField">
<analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>
@H_502_3@c.自定义域
@H_502_3@指定域的类型为自定义的FieldType。
@H_502_3@举一个例子:比如我们使用的sql语句是这样的
SELECT a.id,a.title,a.sell_point,a.price,a.image,b.`name` category_name,c.item_desc FROM tb_item a LEFT JOIN tb_item_cat b ON a.cid = b.id LEFT JOIN tb_item_desc c ON a.id = c.item_id WHERE a.`status` = 1
@H_502_3@需要配置的代码:
<field name="item_title" @H_301_76@type="text_ik" indexed="true" stored="true"/>
<field name="item_sell_point" @H_301_76@type="text_ik" indexed="true" stored="true"/>
<field name="item_price" @H_301_76@type="long" indexed="true" stored="true"/>
<field name="item_image" @H_301_76@type="string" indexed="false" stored="true" />
<field name="item_category_name" @H_301_76@type="string" indexed="true" stored="true" />
<field name="item_desc" @H_301_76@type="text_ik" indexed="true" stored="false" />
<field name="item_keywords" @H_301_76@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"/>