安装步骤
1.前提条件
solr 需要运行在一个Servlet容器中,Solr4.10.3要求jdk使用1.7以上,Solr默认提供Jetty(java写的Servlet容器),本教程使用Tocmat作为Servlet容器,所以我们需要以下环境:
已安装jdk,tomcat
如果没有安装参考我的上两篇博文《Linux安装jdk(CentOS为例)》《Linux安装tomcat并配置开机自启动(CentOS为例)》
2.Solr安装
Solr使用指南可参考:https://wiki.apache.org/solr/FrontPage。
去官网下载linux版压缩包,把solr的压缩包上传到服务器。并解压,解压完有以下目录
文件夹介绍:
1、bin:单独运行服务用到,solr的运行脚本
2、contrib:solr的一些贡献软件/插件,用于增强solr的功能
3、dist:编译后的目标文件,该目录包含build过程中产生的war和jar文件,以及相关的依赖文件。
4、example:实例包,solr的API文档
其中solr是一个标准的solrhome,lib下的exp包含工程需要的jar包
3.Solr整合tomcat
1、把/root/solr-4.10.3/dist/solr-4.10.3.war包部署到tomcat下。并改名为solr.war
cp solr-4.10.3.war /usr/local/src/tomcat/tomcat/webapps/solr.war
2、解压war包。启动tomcat自动解压。关闭tomcat。删除solr.war
1 | cd /usr/local/src/tomcat/tomcat/ |
注意这里必须关闭tomcat,否则删除war包会把解压的一起删掉。
3、把/root/solr-4.10.3/example/lib/ext 目录下所有的jar包复制到solr工程中。
cd example/lib/ext/
cp * /usr/local/src/tomcat/tomcat/webapps/solr/WEB-INF/lib/
4、创建solrhome。Solrhome是存放solr服务器所有配置文件的目录(位置任意)
cd /root/solr-4.10.3/example
cp -r solr /usr/local/src/tomcat/solrhome
5、告诉solr服务器solrhome的位置
需要修改solr工程的web.xml文件。
1 | cd /usr/local/src/tomcat/tomcat/webapps/solr/WEB-INF/ |
取消注释,并把路径改为刚刚创建的solrhome的路径
这里取消注释用到vim小技巧:dd 删除当前行。
6、打开tomcat查看效果
配置
在solr中默认不是中文分析器,需要手工配置。配置一个FieldType,在FieldType中指定中文分析器。
Solr中的字段必须是先定义后使用。
1.中文分词器的配置
1、使用IK-Analyzer。把分析器的文件夹上传到服务器。
2、需要把分析器的jar包添加到solr工程中。
cp IKAnalyzer2012FF_u1.jar /usr/local/src/tomcat/tomcat/webapps/solr/WEB-INF/lib/
3、需要把IKAnalyzer需要的扩展词典及停用词词典、配置文件复制到solr工程的classpath。
1 | cd /usr/local/src/tomcat/tomcat/webapps/solr/WEB-INF/ |
注意:扩展词典及停用词词典的字符集必须是utf-8。不能使用windows记事本编辑。
4、配置fieldType。需要在solrhome/collection1/conf/schema.xml中配置。
vim /usr/local/src/tomcat/solrhome/collection1/conf/schema.xml
在末尾添加
1 | <fieldType name="text_ik" class="solr.TextField"> |
技巧:使用vi、vim跳转到文档开头gg。跳转到文档末尾:G
2.业务字段配置
业务字段需要根据自己目前的项目需求自行定制,比如我们举京东商城的例子
业务字段判断标准:
1、在搜索时是否需要在此字段上进行搜索。例如:商品名称、商品的卖点、商品的描述
2、后续的业务是否需要用到此字段。例如:商品id。
需要用到的字段:
1、商品id
2、商品title
3、卖点
4、价格
5、商品图片
6、商品分类名称
7、商品描述
在schema.xml中添加如下代码
1 | <field name="item_title" type="text_ik" indexed="true" stored="true"/> |