一、Solr简介
在一些大型门户网站、电子商务网站等都需要站内搜索(京东淘宝的搜索框)功能,使用传统的数据库查询方式实现搜索无法满足一些高级的搜索需求,比如:搜索速度要快 、搜索结果按相关度排序、搜索内容格式不固定等,这里就需要使用全文检索技术实现搜索功能。
解决方法:
1 单独使用Lucene实现
单独使用Lucene实现站内搜索需要开发的工作量较大,主要表现在:索引维护、索引性能优化、搜索性能优化等,因此不建议采用。
2 使用Google或Baidu接口
通过第三方搜索引擎提供的接口实现站内搜索,这样和第三方引擎系统 依赖紧密,不方便扩展,不建议采用。
.3 使用Solr实现
基于Solr实现站内搜索扩展性较好并且可以减少程序员的工作量,因为Solr提供了较为完备的搜索引擎解决方案,因此在门户、论坛等系统中常用此方案。
Solr是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务器。
二、环境搭建
1、解压Solr包
Solr 解压后server/solr-webapp下一个webapp目录,它就是Solr的Web项目,把它复制到tomcat的webapps目录下并改名为solr
以下是linux命令,windows同理
# 进入Solr的server目录下
/opt/modules/solr7/solr-7.7.0/server/solr-webapp/
# 复制webapp目录到tomcat-solr的webapps目录下
cp -r webapp/ /usr/local/tomcat/apache-tomcat-9.0.16/webapps
# 将Solr的web应用改名
cd /usr/local/tomcat/apache-tomcat-9.0.16/webapps
# 将webapp重命名为solr
mv webapp/ solr
2、复制所需依赖jar包
复制solr-7.7.0\server\lib\ext下的所有jar包到apache-tomcat-9.0.16\webapps\solr\WEB-INF\lib下(即刚刚复制并重命名为solr的文件夹下)
cp ext/* /usr/local/tomcat/apache-tomcat-9.0.16/webapps/solr/WEB-INF/lib/
复制solr-7.7.0\server\lib下所有metrics-开头的jar包(一共有5个)到apache-tomcat-9.0.16\webapps\solr\WEB-INF\lib下
cp metrics-* /usr/local/tomcat/apache-tomcat-9.0.16/webapps/solr/WEB-INF/lib/
3.配置solrhome路径
1)这个目录用于存储Solr Core(Solr实例)的数据及配置文件,以便存储Solr索引文件
在/usr/local/solr下创建solrhome文件夹
(复制solr-7.7.0\server\solr文件夹,到任意路径下(这里我们放在刚刚创建的solrhome文件夹下),并重命名为solrhome(命名随意),先创建再复制也可以)
# 复制solr目录下所有内容到solrhome
cp -r * /usr/local/solr/ solrhome/
2)创建core实例:在solrhome目录下创建目录名为:new_core
这个就是我们后面要创建的SolrCore实例,当然你也可以改成自己想要的名字
cd solrhome
mkdir new_core
将configsets目录下的 sample_techproducts_configs
目录下的conf文件夹复制到test目录下
cp -r configsets/sample_techproducts_configs/conf/ new_core/
4.配置Tomcat服务器
1) 修改web.xml
修改复制到tomcat中的Solr项目中的WEB-INF
目录下的web.xml
配置文件
cd /usr/local/tomcat/apache-tomcat-9.0.16/webapps/solr/WEB-INF/
vim web.xml
修改solr_home
路径指向我们刚刚创建的solrhome(如果没有,手动加入即可)
<!-- 修改solrhome路径 -->
<env-entry>
<env-entry-name>solr/home</env-entry-name>
<env-entry-value>/usr/local/solr/solrhome</env-entry-value>
<env-entry-type>java.lang.String</env-entry-type>
</env-entry>
2) 去掉安全验证
还是在web.xml
文件中,把安全验证的去掉,不然每次登陆都需要用户名密码验证,麻烦,还有有一种说法:项目会报403错误。
<!-- Get rid of error message -->
<!--
<security-constraint>
<web-resource-collection>
<web-resource-name>Disable TRACE</web-resource-name>
<url-pattern>/</url-pattern>
<http-method>TRACE</http-method>
</web-resource-collection>
<auth-constraint/>
</security-constraint>
<security-constraint>
<web-resource-collection>
<web-resource-name>Enable everything but TRACE</web-resource-name>
<url-pattern>/</url-pattern>
<http-method-omission>TRACE</http-method-omission>
</web-resource-collection>
</security-constraint>
-->
启动tomcat测试
运行startup.sh文件
error:
Linux下启动和关闭tomcat报错,如下图所示:
原因:
因为启动tomcat会调用tomcat安装文件中的startup.bat,而它调用了catalina.bat则调用了setclasspath.bat。因此需要在setclasspath.bat的开头手动声明环境变量。
解决方案:
用vim打开tomcat的bin目录下的setclasspath.sh,添加JAVA_HOME和JRE_HOME两个环境变量(下图红色方框内),两个环境变量路径为您安装的java JDK的路径。
windows下将export改为set即可。
#java development
export JAVA_HOME=/usr/local/java/jdk1.8.0_201
export JRE_HOME=/usr/local/java/jdk1.8.0_201/jre
成功用service tomcat start开启tomcat服务。
访问http://localhost:8080/solr/index.html,部署完成。外部访问则将localhost换为服务器ip地址即可。