CentOS7上的安装Solr7.3.1
1 Solr的下载
Solr官方网站(http://mirrors.shu.edu.cn/apache/lucene/solr/)下载Solr最新版本
2 Solr的环境
1.安装环境CentOS7
2.安装jdk【需要jdk1.8及以上版本】
3.安装tomcat9(非必需,可以使用内置的小服务器jetty)
我的环境:
Solr:solr-7.3.1
Jdk:jdk1.8.0_171
Tomcat:pache-tomcat-9.0.8
3 安装过程
第一步:把Solr的压缩包上传到Linux系统
第二步:在指定的目录下/opt/test/解压tomcat及solr
[root@test01 test]# tar -zxvf solr-7.3.1.gz [root@test01 test]# tar -zxvf apache-tomcat-9.0.8.tar.gz |
第三步:把解压后的/opt/test/solr-7.3.1/server/solr-webapp/下的 webapp 文件夹拷贝到tomcat 的webapps下,重命名为solr,也可以是其他名字
[root@test01 test]# cd /opt/test/solr-7.3.1/server/solr-webapp/ [root@test01 solr-webapp]# cp -r webapp /opt/test/apache-tomcat-9.0.8/webapps/ [root@test01 solr-webapp]# cd /opt/test/apache-tomcat-9.0.8/webapps/ [root@test01 webapps]# mv webapp solr |
第四步:拷贝/opt/test/solr-7.3.1/server/lib/ext下的jar包到 tomcat\webapps\Solr7 项目的WEB-INF\lib下
[root@test01 webapps]# cd /opt/test/solr-7.3.1/server/lib/ext [root@test01 ext]# cp * /opt/test/apache-tomcat-9.0.8/webapps/solr/WEB-INF/lib/ |
第五步:拷贝/opt/test/solr-7.3.1/server/lib目录下gmetric4j-1.0.7.jar,以及以metrics开头的jar包拷贝到WEB-INF\lib下
[root@test01 ext]# cd /opt/test/solr-7.3.1/server/lib [root@test01 lib]# cp gmetric4j-1.0.7.jar /opt/test/apache-tomcat-9.0.8/webapps/solr/WEB-INF/lib/ [root@test01 lib]# cp metrics-*.* /opt/test/apache-tomcat-9.0.8/webapps/solr/WEB-INF/lib/ |
第六步:拷贝/opt/test/solr-7.3.1/server下的solr文件夹到/opt/logs/solr目录下,重命名为solrhome。
[root@bogon logs]# cd /opt/logs [root@bogon logs]# mkdir solr [root@test01 server]# cd /opt/test/solr-7.3.1/server [root@test01 server]# cp -r solr /opt/logs/solr/ [root@test01 server]# cd /opt/logs/solr/ [root@test01 solr]# mv solr solrhome |
第七步:关联Solr和Solrhome.需要修改/opt/test/apache-tomcat-9.0.8/webapps/solr/WEB-INF/web.xml
[root@test01 WEB-INF]# cd /opt/test/apache-tomcat-9.0.8/webapps/solr/WEB-INF
[root@test01 WEB-INF]# vi web.xml
<env-entry> <env-entry-name>solr/home</env-entry-name> <env-entry-value>/opt/logs/solr/solrhome</env-entry-value> <env-entry-type>java.lang.String</env-entry-type> </env-entry> |
注意:需要把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> --> </web-app> |
第八步:解决日志不能够正常显示问题
1.在/opt/test/apache-tomcat-9.0.8/webapps/solr/WEB-INF下面创建一个classes文件夹
[root@test01 WEB-INF]# mkdir classes
2.拷贝/opt/test/solr-7.3.1/server/resources/下的log4j.properties到刚刚创建的classes目录下。
[root@test01 WEB-INF]# cd /opt/test/solr-7.3.1/server/resources/
[root@test01 resources]# cp log4j.properties /opt/test/apache-tomcat-9.0.8/webapps/solr/WEB-INF/classes/
3.在/opt/logs/solr创建一个logs文件夹
[root@test01 solrhome]# cd /opt/logs/solr
[root@test01 solr]# mkdir logs
4.修改log4j.properties文件
[root@test01 classes]# cd /opt/test/apache-tomcat-9.0.8/webapps/solr/WEB-INF/classes
[root@test01 classes]# vi log4j.properties
solr.log=/opt/logs/solr/logs
第九步:启动tomcat,访问Solr时后面记得加上“index.hmtl”
[root@bogon classes]# cd /opt/test/apache-tomcat-9.0.8/bin
[root@bogon bin]# ./startup.sh
4 添加核心的解决
1 字段说明
name:自定义的名字,建议和instanceDir保持一致
instanceDir:Solrhome目录下的示例类目
dataDir:默认填data即可
config:指定配置文件,/opt/logs/solr/solrhome/new_core/conf/solrconfig.xml
schema:指定schema.xml文件,/opt/logs/solr/solrhome/new_core/conf/schema文件(实际上是managed-schema文件)
注意!在schema.xml下面有一个感叹号!直接点击Add Core会提示solrconfig.xml文件找不到
2 添加核心
第一步:进入到Solrhome/new_core目录,复制/opt/test/solr-7.3.1/server/solr/configsets/_default/conf/文件夹到new_core目录下。
[root@bogon ~]# cd /opt/logs/solr/solrhome/
[root@test01 solrhome]# mkdir new_core
[root@test01 solrhome]# cd new_core/
[root@test01 new_core]# cp -r /opt/test/solr-7.3.1/server/solr/configsets/_default/conf/ ./
第二步:切换到Solrhome目录,复制/opt/test/solr-7.3.1/contrib/文件夹到solrhome目录下。
[root@localhost bin]# cd /opt/logs/solr/solrhome/
[root@localhost solrhome]# cp -r /opt/test/solr-7.3.1/contrib/ ./
第三步: 复制/opt/test/solr-7.3.1/dist/文件夹到Solrhome目录下
[root@localhost solrhome]# cp -r /opt/test/solr-7.3.1/dist/ ./
第四步:修改核心配置文件/opt/logs/solr/solrhome/new_core/conf/solrconfig.xml,主要是修改contrib目录,dist目录的相对位置。
[root@test01 conf]# cd /opt/logs/solr/solrhome/new_core/conf
<lib dir="${solr.install.dir:..}/contrib/extraction/lib" regex=".*\.jar" /> <lib dir="${solr.install.dir:..}/dist/" regex="solr-cell-\d.*\.jar" /> <lib dir="${solr.install.dir:..}/contrib/clustering/lib/" regex=".*\.jar" /> <lib dir="${solr.install.dir:..}/dist/" regex="solr-clustering-\d.*\.jar" /> <lib dir="${solr.install.dir:..}/contrib/langid/lib/" regex=".*\.jar" /> <lib dir="${solr.install.dir:..}/dist/" regex="solr-langid-\d.*\.jar" /> <lib dir="${solr.install.dir:..}/contrib/velocity/lib" regex=".*\.jar" /> <lib dir="${solr.install.dir:..}/dist/" regex="solr-velocity-\d.*\.jar" /> |
第五步:重启服务即可正常创建Core,然后instanceDir文件夹(new_core)里会自动生成一个core.properties文件。
new_core文件夹里面的内容如下:
core.properties文件中的内容如下:
到这里就解决了不能添加核心问题。
3 补充
以后再次需要创建SolrCore核心的时候,就不用这么麻烦了。可以直接复制第一创建的new_core目录,修改core.properties文件中的name即可。
5 ikanalyzer 中文分词器
第一步:下载solr7版本的ik分词器:ik-analyzer-solr7-7.x.jar。
下载地址:http://search.maven.org/#search%7Cga%7C1%7Ccom.github.magese
第二步:下载分词器配置文件
GitHub源码地址:https://github.com/magese/ik-analyzer-solr7
第三步:解压GitHub源码地址得到的文件进入resource,目录结构如下:
①IKAnalyzer.cfg.xml
②ext.dic
③stopword.dic
④ik.conf
⑤dynamicdic.txt
第四步:拷贝ik-analyzer-solr7-7.x.jar到/opt/test/apache-tomcat-9.0.8/webapps/solr/WEB-INF/lib目录下面
第五步:拷贝5个配置文件放到/opt/test/apache-tomcat-9.0.8/webapps/solr/WEB-INF/classes目录下面。
[root@bogon new_core]# cd /opt/test/apache-tomcat-9.0.8/webapps/solr/WEB-INF/classes [root@bogon classes]# ll total 28 -rw-r--r--. 1 root root 0 Jul 5 18:44 dynamicdic.txt -rw-r--r--. 1 root root 44 Jul 5 18:44 ext.dic -rw-r--r--. 1 root root 414 Jul 5 18:44 IKAnalyzer.cfg.xml -rw-r--r--. 1 root root 67 Jul 5 18:44 ik.conf -rw-r--r--. 1 root root 1398 Jul 5 18:10 log4j.properties -rw-r--r--. 1 root root 9485 Jul 5 18:44 stopword.dic |
ik.conf文件说明:
files为动态字典列表,可以设置多个字典表,用逗号进行分隔,默认动态字典表为dynamicdic.txt;
lastupdate默认值为0,每次对动态字典表修改后请+1,不然不会将字典表中新的词语添加到内存中,
lastupdate采用的是int类型,不支持时间戳,如果使用时间戳的朋友可以把源码中的int改成long即可;
dynamicdic.txt 为动态字典:
在此文件配置的词语不需重启服务即可加载进内存中
第六步:修改/opt/logs/solr/solrhome/new_core/conf下面的managed-schema文件。添加ik分词器,示例如下
[root@bogon classes]# cd /opt/logs/solr/solrhome/new_core/conf
<!-- 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> |
第七步:重启tomcat,让配置生效。
6 拼音分词器的安装
第一步:下载拼音分词器所需的jar包
http://files.cnblogs.com/files/wander1129/pinyin.zip
第二步:导入JAR包将pinyinAnalyzer4.3.1.jar,pinyin4j-2.5.0.jar三个jar包
导入到/opt/test/apache-tomcat-9.0.8/webapps/solr/WEB-INF/lib目录下面。
第三步:修改/opt/logs/solr/solrhome/new_core/conf下面的managed-schema文件。注意7,x的 class与之前版本不一致。
<!-- ik拼音检索分词器 --> <fieldType name="text_pinyin" class="solr.TextField" positionIncrementGap="0"> <analyzer type="index"> <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory"/> <filter class="com.shentong.search.analyzers.PinyinTransformTokenFilterFactory" minTermLenght="2" /> <filter class="com.shentong.search.analyzers.PinyinNGramTokenFilterFactory" minGram="1" maxGram="20" /> </analyzer> <analyzer type="query"> <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory"/> <filter class="com.shentong.search.analyzers.PinyinTransformTokenFilterFactory" minTermLenght="2" /> <filter class="com.shentong.search.analyzers.PinyinNGramTokenFilterFactory" minGram="1" maxGram="20" /> </analyzer> </fieldType> |
第四步:重启tomcat,查看效果
7 使用dataimport插件批量导入数据
第一步:准备Mysql,创建表
CREATE TABLE `solr`.`items` ( `id` INT NOT NULL, `name` VARCHAR(45) NULL, `price` FLOAT NULL, `detail` VARCHAR(45) NULL, PRIMARY KEY (`id`)); INSERT INTO `solr`.`items` (`id`, `name`, `price`, `detail`) VALUES ('2', '荣耀手机', '4000', '华为'); CREATE TABLE `solr`.`products` ( `pid` INT NOT NULL, `name` VARCHAR(45) NULL, `catalog_name` VARCHAR(45) NULL, `price` FLOAT NULL, `description` VARCHAR(45) NULL, `picture` VARCHAR(45) NULL, PRIMARY KEY (`pid`)) ENGINE = InnoDB DEFAULT CHARACTER SET = utf8; INSERT INTO `solr`.`products` (`pid`, `name`, `catalog_name`, `price`, `description`) VALUES ('1', 'PC100', 'PC', '18000', '苹果电脑'); |
第二步:把dataimport插件的依赖的jar包添加到/opt/logs/solr/solrhome/contrib/dataimporthandler/lib下,lib目录没有就创建一个
[root@localhost ~]# cd /opt/logs/solr/solrhome/contrib/dataimporthandler [root@localhost dataimporthandler]# mkdir lib [root@localhost dist]# cd /opt/logs/solr/solrhome/contrib/dataimporthandler/lib [root@localhost lib]# cp -r /opt/test/solr-7.3.1/dist/solr-dataimporthandler-7.3.1.jar /opt/logs/solr/solrhome/contrib/dataimporthandler/lib/ [root@localhost lib]# cp -r /opt/test/solr-7.3.1/dist/solr-dataimporthandler-extras-7.3.1.jar /opt/logs/solr/solrhome/contrib/dataimporthandler/lib/ |
第三步:导入数据库的驱动包到/opt/logs/solr/solrhome/contrib/dataimporthandler/lib下
数据的jar包需要自己去找。http://mvnrepository.com/artifact/mysql/mysql-connector-java/8.0.11
Jar上传目录网上有两种方式可以设置,可以二选一,但要注意上传目录,与solrconfig.xml配置文件。
推荐第一种方式,第二种方式如果有多个core时候需要对每个core都上传和设置
方式一:
方式二:
例子2用的目录是[root@localhost dataimporthandler]# cp -r ./lib /opt/logs/solr/solrhome/new_core
第四步:修改/opt/logs/solr/solrhome/new_core/conf下面的solrconfig.xml配置文件,添加一个requestHandler
方式一:
<lib dir="${solr.install.dir:..}/contrib/dataimporthandler/lib" regex=".*\.jar" /> <requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler"> <lst name="defaults"> <str name="config">/opt/logs/solr/solrhome/new_core/conf/data-config.xml</str> </lst> </requestHandler> |
方式二:
<!-- 配置批量导入处理器 --> <admin> <defaultQuery>*:*</defaultQuery> </admin> <requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler"> <lst name="defaults"> <str name="config">data-config.xml</str> </lst> </requestHandler> |
第五步:创建一个data-config.xml文件保存到/usr/local/Solr/Solrhome/new_core/conf目录下
[root@localhost lib]# cd /opt/logs/solr/solrhome/new_core/conf
# vim data-config.xml
加入以下内容:
<?xml version="1.0" encoding="UTF-8" ?> <dataConfig> <!-- 配置数据源 --> <!-- url中最后要加上serverTimezone=UTC否则发送请求的时候会乱码 --> <dataSource driver="com.mysql.jdbc.Driver" url="jdbc:mysql://192.168.8.51:3306/solr?serverTimezone=UTC" user="root" password="admin" /> <document> <!-- query中写SQL语句 --> <entity name="items" query="select id, name, price, detail from items"> <!-- column对应数据库中的列名,name为对应的域名(在scheme中没有的话需要配置,即设置业务系统域),这是一个映射关系 --> <field column="id" name="id" /> <field column="name" name="items_name" /> <field column="price" name="items_price" /> <field column="detail" name="items_detail" /> </entity> </document> </dataConfig> |
下面文件是我第二个core中需要用到的,单纯为测试的话,可以不用以下内容:
<?xml version="1.0" encoding="UTF-8" ?> <dataConfig> <dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://192.168.8.51:3306/solr?serverTimezone=UTC" user="tom" password="tom"/> <document> <entity name="product" query="SELECT pid,name,catalog_name,price,description,picture FROM products "> <field column="pid" name="id"/> <field column="name" name="product_name"/> <field column="catalog_name" name="product_catalog_name"/> <field column="price" name="product_price"/> <field column="description" name="product_description"/> <field column="picture" name="product_picture"/> </entity> </document> </dataConfig> |
第六步:修改/opt/logs/solr/solrhome/new_core/conf下面的managed-schema配置文件
dataSource和entitys可根据自己的实际情况修改.
items域:
<!-- 配置items需要的域 --> <field name="items_name" type="text_ik" indexed="true" stored="true"/> <field name="items_price" type="pdouble" indexed="true" stored="true"/> <field name="items_detail" type="text_ik" indexed="true" stored="false"/> <field name="items_keywords" type="text_ik" indexed="true" stored="false" multiValued="true"/> <copyField source="items_name" dest="items_keywords" /> <copyField source="items_detail" dest="items_keywords" /> |
product域:
<!--配置product需要的域--> <field name="product_name" type="text_ik" indexed="true" stored="true"/> <field name="product_price" type="float" indexed="true" stored="true"/> <field name="product_description" type="text_ik" indexed="true" stored="false" /> <field name="product_picture" type="string" indexed="false" stored="true" /> <field name="product_catalog_name" type="string" indexed="true" stored="true" /> <field name="product_keywords" type="text_ik" indexed="true" stored="false" multiValued="true"/> <copyField source="product_name" dest="product_keywords"/> <copyField source="product_description" dest="product_keywords"/> |
managed-schema文件中效果如下:
第七步:重启tomcat,让配置生效。
第八步:点击Execute按钮导入数据。勾选Auto-Refresh Status 可以自动刷新,看到导入的状态
8 定时实时重建索引和增量更新
第一步:准备jar包: apache-solr-dataimportscheduler-1.1.jar、 solr-dataimportscheduler-1.1.jar
第二步:准备 dataimport.properties文件
################################################# # # # dataimport scheduler properties # # # ################################################# # to sync or not to sync # 1 - active; anything else - inactive # 这里的配置不用修改 syncEnabled=1 # which cores to schedule # in a multi-core environment you can decide which cores you want syncronized # leave empty or comment it out if using single-core deployment # 修改成你所使用的core,我这里是我自定义的core:new_core syncCores=new_core # solr server name or IP address # [defaults to localhost if empty] #这个一般都是localhost不会变 server=localhost # solr server port # [defaults to 80 if empty] # 安装solr的tomcat端口,如果你使用的是默认的端口,就不用改了,否则改成自己的端口就好了 port=8080 # application name/context # [defaults to current ServletContextListener's context (app) name] # 这里默认不改 webapp=solr # URL params [mandatory] # remainder of URL # 这里改成下面的形式,solr同步数据时请求的链接。我的环境用delta-import不好用。 #params=/dataimport?command=delta-import&clean=false&commit=true params=/dataimport?command=full-import&clean=false&commit=true # schedule interval # number of minutes between two runs # [defaults to 30 if empty] #这里是设置定时任务的,单位是分钟,也就是多长时间你检测一次数据同步,根据项目需求修改 # 开始测试的时候为了方便看到效果,时间可以设置短一点 interval=1 # 重做索引的时间间隔,单位分钟,默认7200,即5天; # 为空,为0,或者注释掉:表示永不重做索引 reBuildIndexInterval=7200 # 重做索引的参数 reBuildIndexParams=/select?qt=/dataimport&command=full-import&clean=true&commit=true # 重做索引时间间隔的计时开始时间,第一次真正执行的时间=reBuildIndexBeginTime+reBuildIndexInterval*60*1000; # 两种格式:2012-04-11 03:10:00 或者 03:10:00,后一种会自动补全日期部分为服务启动时的日期 reBuildIndexBeginTime=03:10:00 |
第三步: 将solr-dataimportscheduler-1.1.jar包复制到/opt/test/apache-tomcat-9.0.8/webapps/solr/WEB-INF/lib中
第四步: 在/opt/test/apache-tomcat-9.0.8/webapps/solr/WEB-INF目录下的web.xml文件中添加监听配置:
<!-- 为定时实时重建索引和增量更新配置的监听 --> <listener> <listener-class> org.apache.solr.handler.dataimport.scheduler.ApplicationListener </listener-class> </listener> |
第五步: 将dataimport.properties文件放在 /opt/logs/solr/solrhome/conf中。如果conf不存在,需要创建。
[root@bogon conf]# cd /opt/logs/solr/solrhome/conf
[root@bogon solrhome]# mkdir conf
第六步: 重启tomcat
9 不能访问
1 HTTP Status 403 – Forbidden解决
修改/opt/test/apache-tomcat-9.0.8/webapps/solr/WEB-INF/web.xml文件。
然后重启tomcat.欢迎页面:
2 Tomcat端口冲突
3 调用Windows环境的Mysql错误
导入来处windows的mysql数据出错。
报错:1130-host ... is not allowed to connect to this MySql server
解决方法:
确认点一、改表法。
登入mysql后,更改 "mysql" 数据库里的 "user" 表里的 "host" 项,从"localhost"改称"%"
mysql -u root -pvmwaremysql>use mysql;
show tables;
mysql>update user set host = '%' where user = 'root';
mysql>select host, user from user;
mysql>FLUSH RIVILEGES
有可能需要重启
确认点二、3306WINDOWS防火墙策略
确认点三、关闭centos防火墙
systemctl stop firewalld.service#停止firewall
systemctl disable firewalld.service #禁止firewall开机启动