CentOS7上的安装Solr7.3.1

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=UTCuser="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开机启动

猜你喜欢

转载自blog.csdn.net/justs0s0/article/details/81392791
今日推荐