centos 6.8 搭建solr服务器(附安装jdk和Tomcat教程)
solr 搜索服务器运行 在Java开发环境中,所以前置环境需要有linux+jdk+Tomcat,linux的话就不多讲了,买个服务器安装镜像是最快的选择。
一、安装jdk1.8
尽量别搞什么传tgz到服务器的操作了,带宽通常不行。当然觉得速度快也可以吧, 我这只讲yum安装。
1.查看yum库中有那些jdk版本
[root@VM-0-13-centos ~]# yum search java|grep jdk
Repository epel is listed more than once in the configuration
ldapjdk-javadoc.x86_64 : Javadoc for ldapjdk
java-1.6.0-openjdk.x86_64 : OpenJDK Runtime Environment
java-1.6.0-openjdk-demo.x86_64 : OpenJDK Demos
java-1.6.0-openjdk-devel.x86_64 : OpenJDK Development Environment
java-1.6.0-openjdk-javadoc.x86_64 : OpenJDK API Documentation
java-1.6.0-openjdk-src.x86_64 : OpenJDK Source Bundle
java-1.7.0-openjdk.x86_64 : OpenJDK Runtime Environment
java-1.7.0-openjdk-demo.x86_64 : OpenJDK Demos
java-1.7.0-openjdk-devel.x86_64 : OpenJDK Development Environment
java-1.7.0-openjdk-javadoc.noarch : OpenJDK API Documentation
java-1.7.0-openjdk-src.x86_64 : OpenJDK Source Bundle
java-1.8.0-openjdk.x86_64 : OpenJDK Runtime Environment
java-1.8.0-openjdk-debug.x86_64 : OpenJDK Runtime Environment with full debug on
java-1.8.0-openjdk-demo.x86_64 : OpenJDK Demos
java-1.8.0-openjdk-demo-debug.x86_64 : OpenJDK Demos with full debug on
java-1.8.0-openjdk-devel.x86_64 : OpenJDK Development Environment
java-1.8.0-openjdk-devel-debug.x86_64 : OpenJDK Development Environment with
java-1.8.0-openjdk-headless.x86_64 : OpenJDK Runtime Environment
java-1.8.0-openjdk-headless-debug.x86_64 : OpenJDK Runtime Environment with full
java-1.8.0-openjdk-javadoc.noarch : OpenJDK API Documentation
java-1.8.0-openjdk-javadoc-debug.noarch : OpenJDK API Documentation for packages
java-1.8.0-openjdk-src.x86_64 : OpenJDK Source Bundle
java-1.8.0-openjdk-src-debug.x86_64 : OpenJDK Source Bundle for packages with
ldapjdk.x86_64 : The Mozilla LDAP Java SDK
rh-java-common-slf4j-jdk14.noarch : jdk14 module for slf4j
2.选择版本,进行安装
[root@VM-0-13-centos ~]# yum install java-1.8.0-openjdk
3.设置环境变量
[root@VM-0-13-centos ~]# vim /etc/profile
添加如下内容:
#set java environment
JAVA_HOME= /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.111-0.b15.el6_8.x86_64/
JRE_HOME= /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.111-0.b15.el6_8.x86_64//JRE
CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export JAVA_HOME JRE_HOME CLASS_PATH PATH
生效修改:
[root@VM-0-13-centos ~]# source /etc/profile
4.验证可用性
[root@VM-0-13-centos ~]# java -version
openjdk version "1.8.0_272"
OpenJDK Runtime Environment (build 1.8.0_272-b10)
OpenJDK 64-Bit Server VM (build 25.272-b10, mixed mode)
到此安装jdk结束,踩雷了请自行百度加油。
二、安装Tomcat
通过命令yum search tomcat
发现centos 6.8系统下Tomcat只有6版本,不满足目前开发的需要,所以只能慢速传tgz了。上官网http://tomcat.apache.org/download-80.cgi
下载你们自己所需要的版本进行上传,我是传到/usr/local/
下。
1.rz上传
2.解压&安装
1)解压
[root@VM-0-13-centos local]# tar -zxvf apache-tomcat-7.0.47.tar.gz
2)删除压缩包
[root@VM-0-13-centos local]# rm -rf apache-tomcat-7.0.47.tar.gz
3.启动Tomcat
[root@VM-0-13-centos local]# /usr/local/apache-tomcat-7.0.47/bin/startup.sh
电脑浏览器访问服务器8080端口测试,看到以下界面即成功。
如果访问失败,大概思路就是防火墙的端口是否开放。到此Tomcat安装完成,前置环境完成。
其实有个更方便的做法,就是宝塔安装Tomcat。有兴趣的朋友们直接去试试就好,也比较无脑。
三、安装solr单机版
集群版偏麻烦,后面单独写一篇博客。
1.创建solr文件夹(方便管理)
[root@VM-0-13-centos local]# mkdir /usr/local/solr
2.上传solr压缩包并解压
上传:
[root@VM-0-13-centos solr]# rz
解压:
[root@VM-0-13-centos solr]# tar -zxvf solr-4.10.3.tgz.tgz
3.把 /root/solr-4.10.3/dist/solr-4.10.3.war 包部署到tomcat下。并改名为 solr.war
也可以不改名,纯属为了未来偷懒而已。
[root@VM-0-13-centos dist]# cp solr-4.10.3.war /usr/local/apache-tomcat-7.0.47/webapps/solr.war
4.启动Tomcat对war包进行解压
1)启动Tomcat
[root@VM-0-13-centos dist]# cd /usr/local/apache-tomcat-7.0.47/bin/
[root@VM-0-13-centos bin]# ./startup.sh
2)关闭Tomcat
[root@VM-0-13-centos bin]# ./shutdown.sh
3)删除war包
确定已完成解压,切记关闭Tomcat后再删除war包,否则会被一起删除。
[root@VM-0-13-centos webapps]# rm -f solr.war
5.把/usr/local/solr/solr-4.10.3/example/lib/ext 目录下所有的jar包复制到solr工程中
这个文件夹中的jar都是关于日志的。
[root@VM-0-13-centos ext]# cd /usr/local/solr/solr-4.10.3/example/lib/ext/
[root@VM-0-13-centos ext]# cp * /usr/local/apache-tomcat-7.0.47/webapps/solr/WEB-INF/lib/
6.把/usr/local/solr/solr-4.10.3/example/solr复制到任意文件夹中。
/usr/local/solr/solr-4.10.3/example/solr = solrhome ,用来存放solr的配置文件。
[root@VM-0-13-centos ext]# cp -r /usr/local/solr/solr-4.10.3/example/solr /usr/local/solr/solrhome
7.告诉solr服务器solrhome的位置。
需要修改solr工程的web.xml文件。
[root@VM-0-13-centos solr]# vim /usr/local/apache-tomcat-7.0.47/webapps/solr/WEB-INF/web.xml
取消注释,修改路径。
8.启动Tomcat准备测试solr
[root@VM-0-13-centos solr]# /usr/local/apache-tomcat-7.0.47/bin/startup.sh
9.访问solr服务器
电脑浏览器输入:ip地址:端口号/solr
看到这个页面就是solr服务器搭建完成。
四、配置中文解析器
在solr中默认是没有中文分析器的,需要手工配置。配置一个FieldType,在FieldType中指定中文分析器。
1.使用IK-Analyzer。把分析器的文件夹上传到服务器
rz xxx.tgz就可以了,然后直接tar -zxvf xxx.tgz解压出来,我是放在solr文件夹下了。
2.把分析器的jar包添加到solr工程中。
[root@VM-0-13-centos IK_Analyzer_2012FF_hf1]# cp IKAnalyzer2012FF_u1.jar /usr/local/apache-tomcat-7.0.47/webapps/solr/WEB-INF/lib/
3.把IKAnalyzer需要的扩展词典及停用词词典、配置文件复制到solr工程的classpath
classpath = /usr/local/apache-tomcat-7.0.47/webapps/solr/WEB-INF/classes
没有此文件夹的自己新建。
接下来拷贝三个文件到classes文件夹中。
[root@VM-0-13-centos IK_Analyzer_2012FF_hf1]# cp IKAnalyzer.cfg.xml ext_stopword.dic mydict.dic /usr/local/apache-tomcat-7.0.47/webapps/solr/WEB-INF/classes/
注意:扩展词典及停用词词典的字符集必须是utf-8。不能使用windows记事本编辑。
五、配置fieldType
进入solrhome配置文件:
[root@VM-0-13-centos IK_Analyzer_2012FF_hf1]# vim /usr/local/solr/solrhome/collection1/conf/schema.xml
调到文档末尾加入以下配置:
<fieldType name="text_ik" class="solr.TextField">
<analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>
技巧:使用vi、vim跳转到文档开头gg。跳转到文档末尾:G
六、配置业务字段
Solr中的字段必须是先定义后使用。
业务字段判断标准:
- 在搜索时是否需要在此字段上进行搜索。例如:商品名称、商品的卖点、商品的描述。
- 后续的业务是否需要用到此字段。例如:商品id。
此处配置并不统一,所以也没有统一的配置文件,我贴上来我自己的配置让大家看看,大家依葫芦画瓢就没太大问题了。
<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"/>
稍作解释:
field:
- name:字段名
- type:字段类型
- indexed:是否创建索引
- stored:是否存储
copyField(拷贝域item_keywords
):
- source:字段名
- dest:所属域
copyField是solr对搜索引擎做的优化,将其他域中的字段拷贝到一个域中进行检索,可以提高效果。可以类似的拿多表查询转换成单表查询来对比。
七、重启Tomcat
[root@VM-0-13-centos IK_Analyzer_2012FF_hf1]# /usr/local/apache-tomcat-7.0.47/bin/shutdown.sh
[root@VM-0-13-centos IK_Analyzer_2012FF_hf1]# /usr/local/apache-tomcat-7.0.47/bin/startup.sh
可以看见已经能正确查看新增的业务字段了。
八、测试中文分析器是否正常运作
确定正常,到此solr搜索服务器,也就是搜索引擎配置完毕。
九、维护索引库(基础增删改查操作)
添加:添加一个json格式的文件就可以。
修改:在solr中没有update,只需要添加一个新的文档,要求文档id和被修改文档的id一致。原理是先删除后添加。
删除:使用xml格式。
添加:
删除两种方法:
1、根据id删除:
<delete>
<id>test001</id>
</delete>
<commit/>
2、根据select删除(下面代码是删除所有,慎用):
<delete>
<query>*:*</query>
</delete>
<commit/>
十、导入数据库方法
由于我做的是集群版的solr,此处配置插件非常麻烦,所以没有这一步。直接用java代码在solr服务器创建文档进行操作。
maven工程导入solrJ客户端。
java测试。
package com.taozi.rest.solrj;
import java.io.IOException;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.HttpSolrServer;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.common.SolrInputDocument;
import org.junit.Test;
public class SolrJTest {
String baseURL = "http://IP:8080/solr";
/**
* 添加 && 修改
* @return void
*/
@Test
public void addDocument() throws Exception {
//创建一连接
SolrServer solrServer = new HttpSolrServer(baseURL);
//创建一个文档对象
SolrInputDocument document = new SolrInputDocument();
document.addField("id", "test001");
document.addField("item_title", "测试商品1");
document.addField("item_price", 54321);
//把文档对象写入索引库
solrServer.add(document);
//提交
solrServer.commit();
}
/**
* 删除
* @return void
*/
@Test
public void deleteDocument() throws Exception {
//创建一连接
SolrServer solrServer = new HttpSolrServer(baseURL);
//solrServer.deleteById("test001");
solrServer.deleteByQuery("*:*");
solrServer.commit();
}
/**
* 查询
* @return void
*/
@Test
public void queryDocument() throws Exception {
SolrServer solrServer = new HttpSolrServer(baseURL);
//创建一个查询对象
SolrQuery query = new SolrQuery();
//设置查询条件
query.setQuery("*:*");
query.setStart(20);
query.setRows(50);
//执行查询
QueryResponse response = solrServer.query(query);
//取查询结果
SolrDocumentList solrDocumentList = response.getResults();
System.out.println("共查询到记录:" + solrDocumentList.getNumFound());
for (SolrDocument solrDocument : solrDocumentList) {
System.out.println(solrDocument.get("id"));
System.out.println(solrDocument.get("item_title"));
System.out.println(solrDocument.get("item_price"));
System.out.println(solrDocument.get("item_image"));
}
}
}
原创不易,盗版冷静。
有其他交流的想法,可以加我创建的Q群:820080257