
1. 理论基础
1.1 Solr简介
– Solr基于Apache Lucene,它是一个基于Java开源信息检索库
– Solr是一款基于Apache Lucener构建的搜索服务器
– Solr旨在驱动强的的文档检索或分析应用,涵盖非结构化数据、半结构化数据或非结构化数据
– Solr为有限的关系型、图形、统计、数据分析或存储相关用力提供辅助支持。
– Solr基于Apache 2.0许可证,你可以自由地对其进行调整和优化。
– Solr适用于任何商业或非商业用例。
1.2 Solr支持的功能
– Solr的查询语法和解析器支持简单关键字或多字段金额多方面的复杂查询。
– Solr的结果折叠和聚类功能为电子商务和实体店提供极具吸引的功能
– Solr的流式表达式允许你对整个语料库、查询匹配子集或一组文档的随机样本进行分析。
– Solr强大的数学表达式以流式表达式为基于,为高级分析和预测分析用例提供支撑。
– Solr支持高级相关性调整,它几乎支持Lucene的所有文本分析功能,包括分词、词干提取、同义词等(根据用户和领域调整相关性)
– Solr支持“学习排名”功能,通过机器学习来定制相关性
– Solr支持通过HTTP 1.1或2.0请求,响应通常是结构化文档描述符的列表
– Solr文档描述符列表,经典返回10个描述符,每个描述符都包含定位URL,除此还支持返回许多其他类型的文档元数据
– Solr灵活的架构配置允许几乎任何类型的元数据与已索引的文档关联。
– Solr默认返回JSON响应格式,同时支持XML、CSV、优化二进制或任何自定义格式(因此支持各种客户端)
– Solr提供多个客户端API,支持常用的变成语言。
– Solr支持对索引进行分片和复制。
1.3 Solr特点
– Solr具有高度可靠性、可扩展性和容错性
– Solr提供分布式索引,复制和负载平衡查询
– Solr具有自动故障转移和恢复和集中式配置等功能
– Solr为全球许多的互联网站点的搜索和导航提供支持。
1.4 安装要求
1.4.1 支持的操作系统
– 支持Linux
– 支持macOS
– 支持Windows
1.4.2 支持的运行时
– 支持Java运行时环境(JRE)11或更高版本
2 最佳实践
2.1 环境配置
2.1.1 系统环境信息
IP Address = 10.168.0.27
OS = Oracle Linux 9.x x86_64
2.1.2 系统的基本配置
请参阅如下章节完成系统的基本配置,
2.1.3 部署OpenJDK环境
安装完成后,你需要使用如下命令测试安装,
java -version
可见如下显示,
openjdk version "21.0.1" 2023-10-17 OpenJDK Runtime Environment (build 21.0.1+12-29) OpenJDK 64-Bit Server VM (build 21.0.1+12-29, mixed mode, sharing)
2.2 准备软件包
2.2.1 下载软件包
cd ~ wget https://dlcdn.apache.org/solr/solr/9.9.0/solr-9.9.0.tgz
以上只是命令行演示,如果你下载异常或需要其他版本,请从如下连接下载,
https://solr.apache.org/downloads.html
2.2.2 解压安装包
tar -xf solr-9.9.0.tgz
2.3 配置软件包
2.3.1 创建运行用户
groupadd -g 889 solr useradd -u 889 -g 889 -d /var/lib/solr -s /sbin/nologin solr
2.3.2 部署软件包
mv solr-9.9.0 /opt/ mkdir -p /var/log/solr /data/solr chown solr:solr -R /opt/solr* /var/log/solr /data/solr chmod 770 -R /opt/solr* /var/log/solr /data/solr ln -s /opt/solr-9.9.0/server/etc /etc/solr
然后,你还需要使用如下配置环境变量,
vim /etc/profile.d/solr.sh
加入如下配置:
export SOLR_HOME=/opt/solr-9.9.0 export PATH=${SOLR_HOME}/bin:$PATH
2.3.3 定义环境变量配置
cp /opt/solr-9.9.0/bin/solr.in.sh /opt/solr-9.9.0/bin/solr.in.sh.default vim /opt/solr-9.9.0/bin/solr.in.sh
修改如下配置,
SOLR_JAVA_HOME="/usr/java/jdk-21.0.1" SOLR_HEAP="512m" SOLR_JAVA_MEM="-Xms512m -Xmx512m" SOLR_PID_DIR=/run/solr SOLR_DATA_HOME=/data/solr SOLR_LOG_LEVEL=INFO SOLR_LOGS_DIR=/var/log/solr SOLR_PORT=8983 SOLR_JETTY_HOST="0.0.0.0"
2.3.4 获取使用帮助
sudo -u solr bash -c '/opt/solr-9.9.0/bin/solr --help'
可见如下显示,
Usage: solr COMMAND OPTIONS where COMMAND is one of: start, stop, restart, status, healthcheck, create, delete, auth, assert, config, cluster, export, api, package, post, stream, zk ls, zk cp, zk rm , zk mv, zk mkroot, zk upconfig, zk downconfig, snapshot-create, snapshot-list, snapshot-delete, snapshot-export, snapshot-prepare-export Standalone server example (start Solr running in the background on port 8984): ./solr start -p 8984 SolrCloud example (start Solr running in SolrCloud mode using localhost:2181 to connect to Zookeeper, with 1g max heap size and remote Java debug options enabled): ./solr start -c -m 1g -z localhost:2181 --jvm-opts "-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=1044" Omit '-z localhost:2181' from the above command if you have defined ZK_HOST in solr.in.sh. Global Options: -v, --version Print version information and quit --verbose Enable verbose mode Run 'solr COMMAND --help' for more information on a command. For more help on how to use Solr, head to https://solr.apache.org/
2.3.5 测试单节点启动
mkdir -p /run/solr/ chown solr:solr /run/solr/ chmod 770 /run/solr/ sudo -u solr bash -c '/opt/solr-9.9.0/bin/solr start --user-managed'
关于以上参数,
– 由于本章是需要部署单机运行
– 因此我们需要使用“user-managed”声明服务以单节点模式启动
启动后,可见如下显示,
*** [WARN] *** Your open file limit is currently 1024. It should be set to 65000 to avoid operational disruption. If you no longer wish to see this warning, set SOLR_ULIMIT_CHECKS to false in your profile or solr.in.sh *** [WARN] *** Your Max Processes Limit is currently 13405. It should be set to 65000 to avoid operational disruption. If you no longer wish to see this warning, set SOLR_ULIMIT_CHECKS to false in your profile or solr.in.sh Java 21 detected. Enabled workaround for SOLR-16463 Java 21 detected. Incubating Panama Vector APIs have been enabled Waiting up to 180 seconds to see Solr running on port 8983 [\] Started Solr server on port 8983 (pid=8759). Happy searching!
服务启动后,你可以使用如下命令查找服务启动的进程号,
pgrep -u solr java -a
显示如下:
8759 /usr/java/jdk-21.0.1/bin/java -server -Xms512m -Xmx512m -XX:+UseG1GC -XX:+PerfDisableSharedMem -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=250 -XX:+UseLargePages -XX:+AlwaysPreTouch -XX:+ExplicitGCInvokesConcurrent -Xlog:gc*:file=/var/log/solr/solr_gc.log:time,uptime:filecount=9,filesize=20M -Dsolr.jetty.inetaccess.includes= -Dsolr.jetty.inetaccess.excludes= -Dsolr.log.dir=/var/log/solr -Djetty.port=8983 -DSTOP.PORT=7983 -DSTOP.KEY=solrrocks -Djava.io.tmpdir=/tmp -Duser.timezone=UTC -XX:-OmitStackTraceInFastThrow -XX:+CrashOnOutOfMemoryError -XX:ErrorFile=/var/log/solr/jvm_crash_%p.log -Djetty.home=/opt/solr-9.9.0/server -Dsolr.solr.home=/opt/solr-9.9.0/server/solr -Dsolr.install.dir=/opt/solr-9.9.0 -Dsolr.install.symDir=/opt/solr-9.9.0 -Dsolr.default.confdir=/opt/solr-9.9.0/server/solr/configsets/_default/conf -Dsolr.jetty.host=0.0.0.0 -Xss256k -Dsolr.data.home=/data/solr -XX:CompileCommand=exclude,com.github.benmanes.caffeine.cache.BoundedLocalCache::put --add-modules jdk.incubator.vector --enable-native-access=ALL-UNNAMED -Djava.security.manager -Djava.security.policy=/opt/solr-9.9.0/server/etc/security.policy -Djava.security.properties=/opt/solr-9.9.0/server/etc/security.properties -Dsolr.internal.network.permission=* -DdisableAdminUI=false -Dsolr.log.muteconsole -jar start.jar --module=http --module=requestlog --module=gzip
然后,你可以使用如下命令查看服务启动的端口倾听状态,
ss -antp | grep $(pgrep -u solr java)
可见如下信息:
LISTEN 0 50 [::ffff:127.0.0.1]:7983 *:* users:(("java",pid=8759,fd=45)) LISTEN 0 50 *:8983 *:* users:(("java",pid=8759,fd=47))
根据端口的倾听状态,你可能需要开放防火墙的如下端口,
firewall-cmd --permanent --add-port=8983/tcp firewall-cmd --reload firewall-cmd --list-all
最后,如果你需要停止服务,请执行如下脚本,
sudo -u solr bash -c '/opt/solr-9.9.0/bin/solr stop'
2.3.6 创建服务控制脚本
vim /etc/systemd/system/solr.service
加入如下配置,
[Unit] Description=Apache Solr After=network.target [Service] Type=forking User=solr Group=solr RuntimeDirectory=solr ExecStart=/opt/solr-9.9.0/bin/solr start --user-managed ExecStop=/opt/solr-9.9.0/bin/solr stop Restart=on-failure LimitNOFILE=65000 LimitNPROC=65000 [Install] WantedBy=multi-user.target
服务创建后,你需要使用如下命令重载服务,
systemctl daemon-reload
然后,使用如下命令启动服务并设置自启动,
systemctl start solr systemctl enable solr
另外,运行一段时间服务会自动停止,使用如下命令查询,
systemctl status solr
可见如下日志,
Aug 15 17:39:58 solr01.cmdschool.org solr[10665]: NOTE: Please install lsof as this script needs it to determine if Solr is listening on port 8983. Aug 15 17:40:08 solr01.cmdschool.org solr[10665]: Started Solr server on port 8983 (pid=10717). Happy searching! Aug 15 17:40:08 solr01.cmdschool.org solr[10782]: Sending stop command to Solr running on port 8983 ... waiting up to 180 seconds to allow Jetty process 1> Aug 15 17:40:10 solr01.cmdschool.org solr[10782]: [56B blob data] Aug 15 17:40:10 solr01.cmdschool.org systemd[1]: solr.service: Deactivated successfully. Aug 15 17:40:10 solr01.cmdschool.org systemd[1]: solr.service: Consumed 9.345s CPU time.
你需要按照提示安装如下软件包才能正常持续运行,
dnf install -y lsof
2.4 测试Web服务
http://10.168.0.170:8983
参阅文档
==============
安装部署指南
————–
https://solr.apache.org/guide/solr/latest/deployment-guide/system-requirements.html
软件首页
————
https://solr.apache.org/
使用指南
———-
https://solr.apache.org/guide/solr/latest/index.html
启动参数
—————
https://solr.apache.org/guide/solr/latest/deployment-guide/solr-control-script-reference.html
日志配置
———–
https://solr.apache.org/guide/solr/latest/deployment-guide/configuring-logging.html
身份认证插件
—————–
https://solr.apache.org/guide/solr/latest/deployment-guide/authentication-and-authorization-plugins.html#using-security-json-with-solr
其他参考
————–
没有评论