Solr 下载,安装,启动
Solr下载
-
注意: 我们要选择
Binary releases
(二进制版本) -
安装
solr9.x
版本,踩坑:安装后启动时报错,如图:
- 原因: 本地安装的jdk版本为1.8,而
solr9.x
最低要求jdk版本为java 11
。
- 解决方式:
- 升级
JDK
版本,或者重新装低版本的Solr
(本文选择重新安装8.9.0版本)
- 升级
- 原因: 本地安装的jdk版本为1.8,而
Solr安装
下载下来的是个压缩包,解压即可;
-
例如将下载好的
.tgz
文件解压到自定义目录例如:
D:\software\devTool\Solr\solr-8.9.0
Solr安装目录
bin\
该目录中包含几个重要的脚本:
solr\solr.cmd
这是 Solr 的控制脚本,用于启动和停止 Solr 服务。在 SlorCloud 模式下运行时,可以创建集合或内核,配置身份验证以及使用配置文件。post
用于发布内容到 solr 的一个简单的命令行工具。solr.in.sh\solr.in.cmd
此处配置 Java,Jetty 和 Solr 的系统级属性,即全局属性。install_solr_services.sh
在 Linux、Uinx 系统上将 Solr 安装为服务。
contrib\
该目录包含 Solr 专用功能的附加插件。
dist\
该目录包含主要的 Solr jar 文件。
docs\
Solr 帮助文档。
example\
包含几种演示各种 Solr 功能的示例。
licenses\
包含 Solr 使用的第三方库的所有许可证。
server\
该目录是 Solr 应用程序的核心所在:
server\solr-webapp
Solr 的 Admin UI 所在位置
server\lib
Jetty 库
server\logs
日志文件
server\resources
日志配置
server\solr\configsets
示例配置
Solr启动
-
若配置了环境变量则可以直接在cmd中输入
solr
命令;- 配置环境变量:在
path
中添加D:\software\devTool\Solr\solr-8.9.0\bin
- 配置环境变量:在
-
命令方式启动
打开cmd,进入到solr的bin目录下输入
单机模式启动
solr start
显示:
Waiting up to 30 to see Solr running on port 8983
Started Solr server on port 8983. Happy searching!
则表示启动成功。
Cloud方式启动
solr start -e cloud
-
solr+tomcat 启动
Solr其他相关命令:
- solr start -p port 指定端口启动
- solr stop -p port 指定端口关闭
- solr status 查看solr运行状态
- solr stop -all 停止Solr服务器。
- solr restart -p port 重启指定端口的Solr服务器
- solr create_core 用于为Solr服务器创建Core。
- solr create_collection 用于为Solr服务器创建Collection。
- solr create 根据Solr的运行状态选择创建Core或Collection。如果Solr以单机模式运行,则该命令是创建core;若Solr以云模式运行,则该命令是创建Collection。
- solr delete 删除Core或Collection。
- solr version 显示Solr的版本。
Solr管理页面
- 启动成功后访问Solr 服务器: http://localhost:8983/solr/#/
- Dashboard(仪表盘):显示Solr运行状态一览。
- Logging(日志):显示Solr运行日志。
- Core Admin(Core管理):提供了图形用户界面来管理Core。以单机模式启动是显示
Core Admin
,以集群模式启动时则显示cloud
。- Java Properties(Java属性):显示当前运行的JVM属性一览。
- Thread Dump(线程Dump):显示Solr内部的线程Dump。
Solr权限认证
-
默认启动的 Solr 不需要用户名,密码,任何人都可直接访问 。 为了支持权限控制,Solr提供了如下几种身份验证插件:
-
Kerberos Authentication Plugin:Kerberos身份验证插件。
-
Basic Authentication Plugin:基本身份验证插件。
-
Hadoop Authentication Plugin:Hadoop身份验证插件。
-
JWT Authentication Plugin:JWT身份验证插件。
-
使用示例: 使用
Basic Authentication Plugin
(基本身份验证插件)为Solr配置用户名,密码。- 在Solr安装路径下的
server\solr
子目录下添加一个security.json
文件,内容如下:
{ "authentication":{ "blockUnknown": true, "class":"solr.BasicAuthPlugin", "credentials":{"root":"pPKs8BkTXNNLlzipK0LAm6gh64kBEfIuKx1HYU4rHnc= hOJ+WQ/ubP/DPfTnGbjF+ANOZHmnaQ8jAnJh4xxdYu8="}, "realm":"Solr users", "forwardCredentials": false }, "authorization":{ "class":"solr.RuleBasedAuthorizationPlugin", "permissions":[{"name":"security-edit", "role":"admin"}], "user-role":{"root":"admin"} } }
-
blockUnknow
属性指定为true,表明阻止所有未知用户访问,false 则表示关闭Solr的用户认证功能 ; -
class
属性指定使用基本身份验证插件; -
credentials
属性配 置了一个超级用户,其用户名是root,密码是32147。 -
permissions
属性定义了一个admin角色,该角色允许执行secur ity-edit
操作; -
user-role
属性定义了root用户的角色是admin,这样root用 户就拥有执行security-edit
操作的权限。
- 在Solr安装路径下的
Solr停止
- 打开cmd,进入到solr的bin目录下输入
solr stop -all
Solr创建/删除 Core(内核/核心)
在单机模式下,一个 Core 等于一个 Collection。Solr 的 Core 有点类似于RDBMS
(关系型数据库管理系统)的表,Solr Core 同样具有支持唯一标识的主键,也需要定义多个 Field。与RDBMS
不同的是,Core 中存放的是各种文档,且这些文档不需要具有相同的 Field。因此,在正式使用 Solr 之前,必须先创建 Core。
- Solr 中一个核心(core)相当于一个搜索引擎,Solr 想要创建索引需要创建一个Core,可理解为数据的表。
使用命令创建/删除Core
-
使用solr命令直接创建
solr create -c Core 名称 [-d 配置文件目录] [-p 端口]
例如:solr create -c new_code -d sample_techproducts_configs -p 8983
-
使用solr命令的子命令
create_core
创建 Core。solr create_core -c Core 名称 [-d 配置文件目录] [-p 端口]
-
-p:用于指定Solr实例的端口,如果不指定该选项,该命令将自动使用它搜索得到的第一个Solr实例的端口。
-
-d:用于指定这些配置模板所在的路径,如果不指定
-d
选项,Solr 将默认为该选项使用_default
值,也就是使用server\solr\configsets
路径下_default
目录下的配置文件作为配置模板。 -
注意:
不推荐将
_default
目录下的配置文件作为产品级的Core来使用。 在server\solr\configsets
路径下还提供了一个sample_techproducts_configs
目录,该目录下的配置文件可作为产品级的Core来使用,因此推荐使用该目录作为Core配置文件的目录。例如:·
solr create_core -c test -d sample_techproducts_configs -p 8983
-
-
创建完成后, 默认在
server\solr
下会生成内核目录,内核目录下包含两个目录一个文件:conf\
: 存放内核的配置文件。data\
: 存放索引数据,相当于 lucene 中定义 IndexWriter 对象的第一个 Directory 参数。core.preperties
: 内核的一些参数定义。
-
使用solr命令删除Core
solr delete [-c Core 名称] [-p 端口]
例如:
solr delete -c new_code -p 8983
管理页面创建Core
- 只需要在
name
和instanceDir
文本框中分别输入Core名称和保存目录。 如图:
- 注意: 在通过图形用户界面创建Core时,Solr并不会为Core创建目录及配置文件,因此在通过图所示界面中的
Add Core
按钮创建Core之前,先要完成如下两步:- 在
server\solr
路径下创建一个new_core
目录,将instanceDir
指定为new_core
。
- 将
server\solr\configsets\sample_techproducts_configs
目录下的conf
整个目录复制到第1步创建的new_core
目录中。如果之前预定义好了配置文件,也可使用自己的配置文件。
管理页面删除Core
- 只要在界面中选中指定的 Core,然后单击
Unload
按钮即可删除该Core。
- 注意: 使用
solr delete
命令删除 Core 和通过管理页面删除 Core 是有区别的:- 使用
solr delete
命令删除 Core 时,会把整个 Core 对应的目录都彻底删除;
- 但是通过管理页面删除 Core 时,只是将该 Core 从 Solr 系统中删除,并未删除该Core 对应的目录,因此以后还可重载添加回来。
Solr 配置 IK 分词器
-
下载 IK 分词器的 jar 包
Maven 中央仓库(https://search.maven.org/)下载 jar 包:
<dependency>
<groupId>com.github.magese</groupId>
<artifactId>ik-analyzer</artifactId>
<version>8.9.0</version>
</dependency>
单机版Solr配置IK 分词器
-
将 jar 包放入
server\solr-webapp\webapp\WEB-INF\lib
目录下; -
将 jar 包中
resources
目录下的 5 个配置文件放入server\resources
目录下;可以在 github(https://github.com/magese/ik-analyzer-solr) 上下载这些配置文件:- IKAnalyzer.cfg.xml (IK默认的配置文件,用于配置自带的扩展词典及停用词典)
- ext.dic (默认的扩展词典)
- stopword.dic (默认的停词词典)
- ik.conf (动态词典配置文件)
- dynamicdic.txt (默认的动态词典)
-
IKAnalyzer.cfg.xml
配置文件说明:
名称 | 类型 | 描述 | 默认 |
---|---|---|---|
use_main_dict | boolean | 是否使用默认主词典 | true |
ext_dict | String | 扩展词典文件名称,多个用分号隔开 | ext.dic; |
ext_stopwords | String | 停用词典文件名称,多个用分号隔开 | stopword.dic; |
ik.conf
文件说明:
files=dynamicdic.txt lastupdate=0
files
为动态词典列表,可以设置多个词典表,用逗号进行分隔,默认动态词典表为dynamicdic.txt
;lastupdate
默认值为0
,每次对动态词典表修改后请+1,不然不会将词典表中新的词语添加到内存中。
-
dynamicdic.txt
文件说明:dynamicdic.txt
为动态词典 在此文件配置的词语不需重启服务即可加载进内存中。 以#
开头的词语视为注释,将不会加载到内存中。 -
修改Solr的
managed-schema
,添加ik分词器
,示例如下;<!-- 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>
SolrCloud 配置IK 分词器
因为Solr-Cloud
中的配置文件是交由zookeeper
进行管理的, 所以为了方便更新动态词典, 所以也要将动态词典文件上传至zookeeper
中,目录与solr
的配置文件目录一致。
注意:因为zookeeper
中的配置文件大小不能超过1m
,当词典列表过多时,需将词典文件切分成多个。
-
1、将jar包放入每台服务器的Solr服务的
Jetty
或Tomcat
的webapp\WEB-INF\lib\
目录下; -
2、将 jar 包中
resources
目录下的IKAnalyzer.cfg.xml
、ext.dic
、stopword.dic
放入solr服务的Jetty
或Tomcat
的webapp\WEB-INF\classes\
目录下;IKAnalyzer.cfg.xml
(IK默认的配置文件,用于配置自带的扩展词典及停用词典)ext.dic
(默认的扩展词典)stopword.dic
(默认的停词词典)
IKAnalyzer.cfg.xml
配置文件说明:
名称 类型 描述 默认 use_main_dict boolean 是否使用默认主词典 true ext_dict String 扩展词典文件名称,多个用分号隔开 ext.dic; ext_stopwords String 停用词典文件名称,多个用分号隔开 stopword.dic;
- 注意:与单机版不同,
ik.conf
及dynamicdic.txt
请不要放在classes
目录下!
-
3、将
resources
目录下的ik.conf
及dynamicdic.txt
放入solr配置文件夹中,与solr的managed-schema
文件同目录中;-
ik.conf
(动态词典配置) 文件说明:files=dynamicdic.txt lastupdate=0
- files (动态词典列表,可以设置多个词典表,用逗号进行分隔,默认动态词典表为dynamicdic.txt)
- lastupdate (默认值为0,每次对动态词典表修改后请修改该值,必须大于上次的值,不然不会将词典表中新的词语添加到内存中。)
-
dynamicdic.txt
(动态词典)文件说明:dynamicdic.txt
是默认的动态词典,在此文件配置的词语不需重启服务即可加载进内存中。以#
开头的词语视为注释,将不会加载到内存中。
-
-
4、修改Solr的
managed-schema
,添加ik分词器
,示例如下;<!-- 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>
-
5、将配置文件上传至
zookeeper
中,首次使用请重启服务或 reload Collection。