1 官方文档
Welcome to Apache Solr - Apache Solr
1 有两个或者三个独立的包:
solr-8.11.0.zip 适用于 Microsoft Windows 系统 (可能没有,根据版本而定)
- solr-8.11.2-src.tgz Solr 源代码。
- solr-8.11.2.tgz 适用于 Linux/Unix/OSX 系统
2 solr安装单机版
2.1 前置
环境:jdk1.8+tomcat8 一定去官网查看安装solr版本匹配的jdk版本,否则可能报错
8.9版本搭建完,java不能访问,7.1是可以的。注意,注意,注意
目录结构:
solr7.1.0学习笔记(2)---solr的目录结构讲解_Hrzhi的博客-CSDN博客
熟悉名词:
solr_home:SolrHome是Solr存放数据得根目录,将来solr产生的数据就存储在solrHome中
SolrHome可以含多个SolrCore;
SolrCore:类似于一个链接下的多个数据库,一个库就是一个SolrCore
简单理解:solr_home就是存放数据得根目录,具体存放数据得目录称为(SolrCore),
Solr--02.Solr中Core详解_sswqzx的博客-CSDN博客
2.2 windows下安装
win下和linux下步骤一样的,只不过用命令执行操作
2.2jetty版访问
1 解压solr-8.9.0.zip
solr内置了一个服务器 jetty服务器,直接启动即可访问。
bin目录下 执行命令
使用内嵌jetty启动solr
solr start
停止
solr stop /solr stop -all
查看信息 例如solr_home位置等
solr status
访问地址:
http://localhost:8983/solr/#/
2.2tomcat版访问
1: 解压solr-8.9.0.zip ,在解压 apache-tomcat-8.5.41
2: 进入到 solr-8.9.0\server\solr-webapp 目录下
3 .1: 方式1 直接将 webapp目录整个复制到 tomcat的webapps目录下,并将webapp改名为solr
3.2: 方式2 进入webapp目录下,将里面所有文件打成solr.war包,将solr.war包复制到tomcat的webapps目录下, 启动tomcat,让tomcat解压solr.war即可
jar cvf solr.war ./*
tomcat目录下
4:修改tomcat下webapps/solr/WEB-INF/web.xml的配置solr_home的位置
让着solr.war项目知道索引库的根目录位置在哪,
如果没有该目录自己手动创建solr_home这个文件夹
注意该方式win下路径斜杠要对,否则找不到solrHome,如果还是找不到solrHome,请看步骤13
<env-entry>
<env-entry-name>solr/home</env-entry-name>
<env-entry-vale>E:\myData\软件包\solr/solr_home"你的solrhome位置路径不能有中文"</env-entry-vale>
<env-entry-type>java.lang.String</env-entry-type>
</env-entry>
5: 配置根目录的配置信息
5.1:去solr-8.9.0\server\solr 下copy两个配置文件(solr.xml,zoo.cfg) 复制到 步骤4配置的solr_home根目录下。 也可以复制全部文件到solr_home文件夹内,都行
5.2:拷贝solr-8.9.0 下 contrib和dist文件夹复制到 solr_home下
6:自己简单玩玩可以先关闭安全认证,不然报403
注释掉下面的配置,tomcat下webapps/solr/WEB-INF/web.xml的配置
<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>
7:拷贝日志工具相关jar包:将solr-8.9.0\server\lib\ext下的所有jar包拷贝到tomcat下Solr的/WEB-INF/lib/目录下
8:拷贝metrics相关jar包:将solr-8.9.0\server\lib下metrics相关jar包 或者除了jetty外都(暂定) 拷贝到tomcat下Solr的/WEB-INF/lib/目录下,要是有这个gmetric4j-1.0.7.jar也copy过去吧。
9:拷贝dataimport相关jar包:将solr-8.9.0\dist下solr-dataimport相关jar包拷贝到tomcat下Solr的/WEB-INF/lib/目录下 (作用:数据库导入到solr所用)
10:拷贝log4j2配置文件:将solr-8.9.0\server\resources目录中log4j配置文件拷贝到tomcat下Solr的/WEB-INF/classes(自行创建目录),并修改日志文件的路径
方式一:就必须在启动tomcat启动脚本上加参数。(不同环境不同命令,下面有)
方式二 :log4j2.xml中${sys:solr.log.dir} 如果不配置好路径,
注意:版本不同,文件名或者个数不一样的7.1就是一个文件
11:配置solr_home中solrCore, 创建 collection1文件夹(collection1索引库) 将 solr-8.9.0\example\example-DIH\solr\solr 中 所有复制到 自己创建的collection1中,并且在collection1中创建一个data文件夹
11.2:复制完成后,collection1下的conf/solrconfig.xml 文件修改,
12:tomcat下solr的/WEB-INF/classes/log4j2.xml的配置文件
里面log路径是动态的 ${sys:solr.log.dir} ,启动tomcat会报错
方式一:直接写死日志保存路径
方拾二:修改tomcat启动脚本,指定日志路径
tomcat的bin\catalina.bat ,linux下bin\catalina.sh 中配置日志文件的环境参数
win下:
set "JAVA_OPTS=%JAVA_OPTS% -Dsolr.log.dir=E:\myData\software\solr\apache-tomcat-8.5.41-solr\logs"
linux下:
JAVA_OPTS="-Dsolr.log.dir=/usr/local/solr/tomcat-8.5.47/logs/solr"
13:启动tomcat 会报solr.xml does not exist in solr cannot start Solr
tomcat的bin\catalina.bat, linux下bin\catalina.sh中配置日志文件的环境参数
win下:
set "JAVA_OPTS=%JAVA_OPTS% -Dsolr.solr.home=E:\myData\software\solr\solr_home"
linux下:
JAVA_OPTS="-Dsolr.solr.home=/usr/local/solr/solr_home"
重启tomcat,看到welcome,说明solr安装完毕。
12访问后台测试
http://localhost:8080/solr/index.html
2.3 linux下安装
2.3.1 先安装jdk1.8
和在windows步骤一样,只不过需要命令去复制安装等
如果 没有安装vim 编辑
yum -y install vim*
解压命令
tar -zxvf solr-8.11.2.tgz -C /usr/local/solr/
拷贝命令 文件夹拷贝就加 -r
cd solr-8.11.2/server/solr-webapp/
cp -r webapp /usr/local/solr/tomcat-8.5.47/webapps/
将复制到tomcat下的项目改名
mv webapp/ solr
复制 solr-8.11.2/server/lib/ext下所有jar
cp * /usr/local/solr/tomcat-8.5.47/webapps/solr/WEB-INF/lib/
复制 solr-8.11.2/server/lib下metrics-前缀的jar
cp metrics-* /usr/local/solr/tomcat-8.5.47/webapps/solr/WEB-INF/lib/
<env-entry>
<env-entry-name>solr/home</env-entry-name>
<env-entry-vale>/usr/local/solr/solr_home/</env-entry-vale>
<env-entry-type>java.lang.String</env-entry-type>
</env-entry>
tomcat下的bin\catalina.sh 中配置日志和solrHome的环境参数
JAVA_OPTS="-Dsolr.log.dir=/usr/local/solr/tomcat-8.5.47/logs/solr"
JAVA_OPTS="-Dsolr.solr.home=/usr/local/solr/solr_home"
3ik分词器安装
http://code.google.com/p/ik-analyzer/downloads/list
3.1.1 测试自带分词效果,不是很好
3.1.2安装步骤
- 3.2.1:解压下载的IKAnalyzer安装包
- 3.2.2:将解压完的 IKAnalyzer*.jar(名字不同),复制到tomcat下webapps\solr\WEB-INF\lib下
- 3.2.3扩展词和停用词的配置 IKAnalyzer.cfg.xml 即可,本文中是已经成型的,官网都有讲解,很简单
讲解一下:
在solr_home中collention1\conf 修改配置 managed-schema(低版本就是schema.xml)
哪个索引库用ik,哪个库就改 ,这里是测试collention1这个库
<!-- ik分词器 -->
<fieldType name="text_ik" class="solr.TextField">
<analyzer type="index">
<tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="false" conf="ik.conf"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="true" conf="ik.conf"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
3.1.3动态添加词语
3.2.1 IKAnalyzer2012_u6 版本测试
IKAnalyzer2012_u6:8.9不适用
3.3.1IKAnalyzer2012FF_u1版本测试
IKAnalyzer2012FF_u1:测试solr版本8.9,不适用
步骤1:解压IKAnalyzer2012FF_u1
步骤2:将IKAnalyzer2012FF_u1.jar 复制到tomcat下webapps\solr\WEB-INF\lib下
步骤3:将下面介绍的文件复制到 tomcat下webapps\solr\WEB-INF\classes下
简单介绍一下 IKAnalyzer.cfg.xml:配置扩展词和停用词 , 自己要配置一下
stopword.dic(停用词) ,自己可以随意创建文件的
步骤4 :配置solr_home 中的某个索引库(本文是collection1) ,solr_home/collection1/conf/managed-schema(低版本就是schema.xml)
<!-- ik分词器-->
<fieldType name="text_ik" class="solr.TextField">
<analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>
一定要自己试试,可能查询的就会报错,自己也可以添加扩展词,停用词在自己测试一下
3.4.1ik-analyzer-solr7-7.x版本测试
可以支持solr8.9版本
报错:SolrCore Initialization Failures
4 集群版搭建
zk的搭建可以看我的zk
伪集群:一台机器上部署4个solr,所以tomcat端口冲突,要修改端口
4.1 按照上面部署方式 部署一台单机的solr(能够访问成功后)
4.2复制 4份tomcat 和4份solrHome
cp -rf tomcatsolr1 tomcatsolr2
cp -rf solr_home1 solr_home2
4.3 去每个tomcat下下webapps\solr\WEB-INF下修改web.xml 配置solrHome的对应各自的路径
4.4 tomcat下的bin\catalina.sh 中配置日志和solrHome的环境参数路径对应各自修改
4.5 每个tomcat端口号修改, 修改配置文件 tomcat\conf\server.xml
详解默认端口: tomcat 8005(shutdown停止tomcat端口) , 8080(接收请求端口),8009(ajp连接端口)
4个tomcat配置如下:
tomcat1 | 8105 | 8180 | 8109 |
tomcat2 | 8205 | 8280 | 8209 |
tomcat3 | 8305 | 8380 | 8309 |
tomcat4 | 8405 | 8480 | 8409 |
4.6修改每个solrHome下solr.xml的集群配置,对应指定tomcat的ip和端口
<solrcloud>
<str name="host">192.168.135.128</str>
<int name="hostPort">8180</int>
4.7配置每个tomcat 下的bin\catalina.sh 中配置 zk集群信息,让每一条tomcat都和zk集群关联
端口是zk的集群(3台)客户端端口,分别是 2181,2182,2183
JAVA_OPTS="-DzkHost=192.168.135.128:2181,192.168.135.128:2182,192.168.135.128:2183"
4.8 让zk统一管理solr集群的配置文件
solr集群中每一个节点配置都要一致,所以需要zk管理solr集群的配置文件。主要管理的就是solrconfig.xml 和 (schema.xml/managed-schema)文件
下面的命令就是将conf目录下的配置文件,上传到zk.以后集群中的配置文件以zookeeper中为准,搭建好集群后,solrcore中没有配置文件的
在 解压的 solr7.1下 目录 solr-7.1.0\server\scripts\cloud-scripts 执行下面的命令
注意:一定先启动zk集群
./zkcli.sh -zkhost 192.168.135.128:2181,192.168.135.128:2182,192.168.135.128:2183 -cmd upconfig -confdir /usr/local/solr/solr_home1/collection1/conf -confname myconf
-zkhost:指定zk地址列表
upconfig:上传配置文件
-confdir:指定配置文件所在目录
-confname:指定上传到zookeeper后的目录名
查看是否上传成功:使用插件 ZooInspector 链接随便一台zk 查看是否数据已经上传,还可以删除上传的节点
4.9 由于solr配置文件,已经交给zk管理了。所有的solrHome中 solrCore 必须删除掉
5.0启动所有tomcat(做一个脚本可以)
./tomcatsolr1/bin/startup.sh
./tomcatsolr2/bin/startup.sh
./tomcatsolr3/bin/startup.sh
./tomcatsolr4/bin/startup.sh
访问四个solr管理后台:开放端口及刷新防火墙
http://192.168.135.128:8180/solr/index.html
http://192.168.135.128:8280/solr/index.html
http://192.168.135.128:8380/solr/index.html
http://192.168.135.128:8480/solr/index.html
5 solr集群后续
5.1 修改域
5.2数据分片
创建新的collection进行分片处理。
参数:name:将被创建的集合名字
numShards:集合创建时需要创建的逻辑碎片个数
replicationFactor:分片的副本数
图形化方式:
手动方式:
在浏览器输入一下地址,可以按照 我们的要求 创建新的collection
http://192.168.135.128:8180/solr/admin/collections?action=CREATE&name=collection1&numShards=2&repllcationFactor=2&collection.configName=myconf
必须添加完成后,一定在管理页面添加数据,在查询,有可能搭建完事用不了的。