yeskery

CentOS 下安装部署 Solr 7

Solr 是一个高性能,采用 Java 开发基于 Lucene 的全文搜索服务器。同时对其进行了扩展,提供了比Lucene 更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎。

文档通过 Http 利用 XML 加到一个搜索集合中。查询该集合也是通过 http 收到一个 XML/JSON 响应来实现。它的主要特性包括:高效、灵活的缓存功能,垂直搜索功能,高亮显示搜索结果,通过索引复制来提高可用性,提供一套强大 Data Schema 来定义字段,类型和设置文本分析,提供基于 Web 的管理界面等。

Solr 的下载安装

http://archive.apache.org/dist/lucene/solr/ 页面可以下载所有的 Solr 发行版,当前最新的发行版为 7.3.1,本文将以 7.3.1 作为演示版本。

Solr 7 最低需要 Java1.8 以上版本 Java,由于 Solr 已经内嵌 jerry,所以不需要关心 jetty 版本,如果需要使用 Tomcat 作为容器,则需要 Tomcat 8 以上版本的 Tomcat 来运行 Solr。

关于 Java 的安装,这里不再叙述,可参考 CentOS 7 安装 JRE与环境变量配置

将下载好的 solr-7.3.1.zipsolr-7.3.1.tgz 解压到 /usr/local/solr/ 中,该位置可以自定,以下命令皆在该目录下进行,可以根据实际情况进行修改。

解压命令:unzip solr-7.3.1.zip 或者 tar -zxvf solr-7.3.1.tgz

  1. drwxr-xr-x. 3 root root 4096 5 9 09:31 bin //用来启动内嵌jetty的solr,可一键启动的命令目录
  2. -rw-r--r--. 1 root root 791609 5 9 09:31 CHANGES.txt
  3. drwxr-xr-x. 12 root root 4096 5 9 09:31 contrib //solr的相关扩展包
  4. drwxr-xr-x. 4 root root 4096 5 9 09:31 dist //solr相关的工程的jar包,包括solr、solrj、测试框架的相关jar包
  5. drwxr-xr-x. 3 root root 4096 5 9 09:31 docs //solr相关文档
  6. drwxr-xr-x. 7 root root 4096 5 9 09:31 example //solr自带的示例程序
  7. drwxr-xr-x. 2 root root 32768 5 9 09:31 licenses //solr用到的程序的协议
  8. -rw-r--r--. 1 root root 12872 5 9 09:31 LICENSE.txt
  9. -rw-r--r--. 1 root root 689623 5 9 09:31 LUCENE_CHANGES.txt
  10. -rw-r--r--. 1 root root 25453 5 9 09:31 NOTICE.txt
  11. -rw-r--r--. 1 root root 7679 5 9 09:31 README.txt
  12. drwxr-xr-x. 10 root root 4096 5 9 09:31 server //solr相关程序,资源及配置文件

可以使用 bin/solr start 命令直接启动 Solr,使用该命令启动的 Solr 的默认端口为 8983,使用 ip:8983 即可访问 Solr 管理界面。

Solr 无法访问的情况

如果利用自带的命令成功启动 Slor,但页面没有显示、显示无法连接或连接超时等情况,可以使用检查 CentOS 的防火墙是否开放 8983 端口。

CentOS 6

关闭防火墙:

  1. service iptables stop #iptables
  2. chkconfig iptables off #禁止iptables开机启动
  3. service iptables status #查看默认防火墙状态

开启端口:
在配置文件 /etc/sysconfig/iptables 修改或添加以下内容

  1. vi /etc/sysconfig/iptables
  2. -A INPUT -p tcp -m state --state NEW -m tcp --dport 8983 -j ACCEPT #打开端口
  3. -A INPUT -p tcp -m state --state NEW -m tcp --dport 8983 -j ACCEPT #关闭端口

接着重启防火墙 /etc/init.d/iptables restartservice iptables start

CentOS 7

关闭防火墙:

  1. systemctl stop firewalld.service #停止firewall
  2. systemctl disable firewalld.service #禁止firewall开机启动
  3. firewall-cmd --state #查看默认防火墙状态(关闭后显示notrunning,开启后显示running)

开启端口的命令:

  1. firewall-cmd --zone=public --add-port=8983/tcp --permanent #(--permanent永久生效,没有此参数重启后失效)

在 Tomcat 中安装 Solr

Solr7 需要 Tomcat8 以上版本的 Tomcat,在 https://tomcat.apache.org/download-80.cgi 也在 Tomcat8,在 https://tomcat.apache.org/download-90.cgi 下载 Tomcat9。

将下载好的 apache-tomcat-8.5.31.tar.gz 解压到 /usr/local/solr/ 中,该位置可以自定,以下命令皆在该目录下进行,可以根据实际情况进行修改。

新建 Solr home 文件夹

/usr/local/solr/apache-tomcat-8.5.31/ 下新建 solrhome,路径和文件夹名称可以自定,以下命令皆在该目录下进行,可以根据实际情况进行修改。

mkdir /usr/local/solr/apache-tomcat-8.5.31/solrhome

将 Solr 提供的默认配置文件复制到 Solr home 文件夹下:

cp -r /usr/local/solr/solr-7.3.1/server/solr/* /usr/local/solr/apache-tomcat-8.5.31/solrhome

将运行 Solr 所需要的文件及 Jar 文件复制到 Tomcat 中

  1. 在 Tomcat 的 webapps 文件夹中新建 solr 文件夹。

mkdir /usr/local/solr/apache-tomcat-8.5.31/webapps/solr/

  1. 将 Solr 提供的 Java Web 文件复制到上面创建的文件夹中

cp -r /usr/local/solr/solr-7.3.1/server/solr-webapp/webapp/* /usr/local/solr/apache-tomcat-8.5.31/webapps/solr/

  1. 将 Solr 运行的其它依赖 Jar 文件复制到项目中
  1. cp -r /usr/local/solr/solr-7.3.1/server/lib/ext/* /usr/local/solr/apache-tomcat-8.5.31/webapps/solr/WEB-INF/lib/
  2. cp -r /usr/local/solr/solr-7.3.1/server/lib/metrics*.* /usr/local/solr/apache-tomcat-8.5.31/webapps/solr/WEB-INF/lib/
  3. cp -r /usr/local/solr/solr-7.3.1/dist/solr-dataimporthandler-*.* /usr/local/solr/apache-tomcat-8.5.31/webapps/solr/WEB-INF/lib/
  1. 复制 log4j 的配置文件
  1. mkdir -p /usr/local/solr/apache-tomcat-8.5.31/webapps/solr/WEB-INF/classes/
  2. cp /usr/local/solr/solr-7.3.1/server/resources/log4j.properties /usr/local/solr/apache-tomcat-8.5.31/webapps/solr/WEB-INF/classes/

修改 Solr 的 web.xml 配置文件

设置 Solr 的配置目录,打开 env-entry 标签的注释,并注释掉 security-constraint 标签,env-entry 标签用来设置 Solr 的配置目录,security-constraint 会引起访问权限不足而导致无法访问,这里先进行注释。

vim /usr/local/solr/apache-tomcat-8.5.31/webapps/solr/WEB-INF/web.xml

按照如下进行设置:

  1. <env-entry>
  2. <env-entry-name>solr/home</env-entry-name>
  3. <env-entry-value>/usr/local/solr/apache-tomcat-8.5.31/solrhome</env-entry-value>
  4. <env-entry-type>java.lang.String</env-entry-type>
  5. </env-entry>
  6. ...
  7. <!--
  8. <security-constraint>
  9. <web-resource-collection>
  10. <web-resource-name>Disable TRACE</web-resource-name>
  11. <url-pattern>/</url-pattern>
  12. <http-method>TRACE</http-method>
  13. </web-resource-collection>
  14. <auth-constraint/>
  15. </security-constraint>
  16. <security-constraint>
  17. <web-resource-collection>
  18. <web-resource-name>Enable everything but TRACE</web-resource-name>
  19. <url-pattern>/</url-pattern>
  20. <http-method-omission>TRACE</http-method-omission>
  21. </web-resource-collection>
  22. </security-constraint>
  23. -->

此时,访问 IP:PORT/solr/ 应该就能看见 Solr 的管理页面,如果 Tomcat 报 404 错误,请检查下 Jar 文件是否已经全部导入到 Tomcat 项目中了。

新建 Core

由于 Solr 页面已经提供了新建 Add Core 的功能,只需要少量设置就可以创建一个 Core。也可以手动创建 Core,这里不再叙述。

创建 Core 文件夹

Solr 创建页面上提示在创建 Core 之前,需要提前创建好 instanceDirdataDir,所以我们先按要求创建好这两个文件夹

mkdir -p /usr/local/solr/apache-tomcat-8.5.31/solrhome/user_core/data/

接着在页面按照要求进行填写:

Solr_Add_Core.png

点击 Add Core 按钮之后,Solr 就会创建一个 Core。

配置中文分词器

在进行中文分词的时候,需要用到中文分词器。

Smartcn

Smartcn 一种是基于中科院 ICTCLAS 的隐式马尔科夫HMM算法的中文分词器。因为 Solr 发行包中提供了 Smartcn 的 Jar 包,所以优先使用这种分词方法,但是这个分词工具不支持自定义词库。

  1. 首先将 Smartcn 的 jar 文件复制到 Solr 项目中

cp /usr/local/solr/solr-7.3.1/contrib/analysis-extras/lucene-libs/ucene-analyzers-smartcn-7.3.1.jar /usr/local/solr/apache-tomcat-8.5.31/webapps/solr/WEB-INF/lib/

  1. 修改打开 Solr home 中的配置文件

vim /usr/local/solr/apache-tomcat-8.5.31/solrhome/user_core/conf/managed-schema

在配置文件末尾添加 一个 filedType 和 一个 field(用于测试中文分词器是否可用,具体用于需要检索的字段)

  1. <fieldType name="text_smartcn" class="solr.TextField" positionIncrementGap="100">
  2. <analyzer type="index">
  3. <tokenizer class="org.apache.lucene.analysis.cn.smart.HMMChineseTokenizerFactory"/>
  4. </analyzer>
  5. <analyzer type="query">
  6. <tokenizer class="org.apache.lucene.analysis.cn.smart.HMMChineseTokenizerFactory"/>
  7. </analyzer>
  8. </fieldType>
  9. <field name ="text" type ="text_smartcn" indexed ="true" stored ="true" />
  1. 重启 Solr 服务
    重启之后,在 Core 下面的 Analysis 页面中的 Analyse Fieldname / FieldType: 就能看到设置的这个 text 字段,可以进行中文分词测试。

IK Analyzer

IK Analyzer 一种是基于最大匹配的分词器。IK Analyzer 的下载地址:https://code.google.com/p/ik-analyzer/ 。该项目在 2012 年之后,就没有进行更新,其所依赖的lucene相关组件的版本为4.X,已经不能适配最新的 Solr。

以下是非官方的修改支持新版 Solr 的版本,下载地址:ikanalyzer-solr6.5.zip

  1. 将 IK Analyzer 需要用到的 jar 文件复制到 Solr 项目中
  1. cp solr-analyzer-ik-5.1.0.jar /usr/local/solr/apache-tomcat-8.5.31/webapps/solr/WEB-INF/lib/
  2. cp ik-analyzer-solr5-5.x /usr/local/solr/apache-tomcat-8.5.31/webapps/solr/WEB-INF/lib/
  1. 将 IK Analyzer 需要用到的文件复制到到项目中
  1. ext.dic 为扩展字典
  2. stopword.dic 为停止词字典
  3. IKAnalyzer.cfg.xml 为配置文件
  4. cp ext.dic /usr/local/solr/apache-tomcat-8.5.31/webapps/solr/WEB-INF/classes/
  5. cp stopword.dic /usr/local/solr/apache-tomcat-8.5.31/webapps/solr/WEB-INF/classes/
  6. cp IKAnalyzer.cfg.xml /usr/local/solr/apache-tomcat-8.5.31/webapps/solr/WEB-INF/classes/
  1. 修改打开 Solr home 中的配置文件

vim /usr/local/solr/apache-tomcat-8.5.31/solrhome/user_core/conf/managed-schema

在配置文件末尾添加 一个 filedType 和 一个 field(用于测试中文分词器是否可用,具体用于需要检索的字段)

  1. <fieldType name="text_ik" class="solr.TextField">
  2. <analyzer type="index">
  3. <tokenizer class="org.apache.lucene.analysis.ik.IKTokenizerFactory" useSmart="true"/>
  4. </analyzer>
  5. <analyzer type="query">
  6. <tokenizer class="org.apache.lucene.analysis.ik.IKTokenizerFactory" useSmart="true"/>
  7. </analyzer>
  8. </fieldType>
  9. <field name ="text" type ="text_smartcn" indexed ="true" stored ="true" />
  1. 重启 Solr 服务
    重启之后,在 Core 下面的 Analysis 页面中的 Analyse Fieldname / FieldType: 就能看到设置的这个 text 字段,可以进行中文分词测试。

本文部分内容来自:

  1. https://blog.csdn.net/shanshanw/article/details/78805454
  2. https://blog.csdn.net/jiadajing267/article/details/78692702
  3. https://blog.csdn.net/qq_28114645/article/details/77961998
  4. https://blog.csdn.net/zcl_love_wx/article/details/52091622

评论

发表评论 点击刷新验证码

提示

该功能暂未开放