Lib 目录和指令
在这里,我们描述两种简单有效的方法,使 Solr 插件的 .jar
文件对 Solr 可见。
此类文件有时被称为 "libraries" 或简称为 "libs"。 基本上,您可以将它们放在一些特殊的位置,或者从您的配置中显式地告诉 Solr 关于它们的信息。
如果库之间存在重叠或相互依赖关系,请注意顺序。您可以将其视为一个自上而下搜索的堆栈。最上面是反向顺序的 lib 指令,然后是 Solr 核心的 lib,然后是 Solr home 的 lib,然后是 Solr 本身。
Lib 目录
您可以将 Solr 插件的 .jar
文件放在几个特殊位置
-
<solr_home>/lib/
: 放置在此处的.jar
文件可用于节点上运行的所有 Solr 核心,以及solr.xml
中引用的节点级插件,基本上适用于所有内容。 此目录默认不存在,因此您需要创建它。 请参阅Solr 生产环境部署。 -
<core_instance>/lib/
: 在用户管理的集群或单节点安装中,您可能只想为特定的 Solr 核心添加插件。 在<core_instance>/conf/
目录旁边创建此目录;它默认不存在。 -
<solr_install>/lib/
: 放置在此处的.jar
文件可用于节点上运行的所有 Solr 核心,以及solr.xml
中引用的节点级插件,基本上适用于所有内容。 与<solr_home>/lib/
相反,此目录始终位于安装目录中,因此例如可以用于自定义 Dockerfile 来放置自定义插件 jar。 -
<solr_install>/server/solr-webapp/webapp/WEB-INF/lib/
: Solr 本身及其依赖项的.jar
文件位于此处。某些插件或插件的附加组件需要放置在此处,并且它们将具有明确的文档说明此需求。 -
<solr_install>/server/lib/ext
: 用于 Solr 服务器以及 Solr Core/SolrJ 的.jar
文件。
Solr 使用 Jetty 来提供 HTTP 服务器功能。Jetty 有一些目录包含其自身及其插件/模块或 JVM 级插件(例如,日志记录器)的 .jar
文件。Solr 插件在这些位置无法工作。
SolrConfig 中的 Lib 指令
插件和资源文件路径都可以通过 solrconfig.xml
中的 <lib/>
指令进行配置。当指令匹配一个目录时,可以从中解析资源。当指令匹配一个 .jar
文件时,Solr 插件及其依赖项会从中解析。资源也可以放在 .jar
文件中,但这并不常见。引用任何其他类型的文件是错误的。
一个 <lib/>
指令必须具有以下两个属性之一(不能同时具有两个)
-
path
:用于引用单个目录(用于资源)或文件(用于插件.jar
) -
dir
:用于引用指定目录的所有直接子级。可以选择提供regex
属性,将这些子级过滤为与正则表达式匹配的子级。
所有目录都相对于 Solr 核心的 instanceDir
进行解析。
这些示例展示了如何将模块加载到 Solr 中
<lib dir="${solr.install.dir:../../../..}/modules/extraction/lib" regex=".*\.jar" />
<lib dir="${solr.install.dir:../../../..}/modules/clustering/lib/" regex=".*\.jar" />
<lib dir="${solr.install.dir:../../../..}/modules/langid/lib/" regex=".*\.jar" />
<lib dir="${solr.install.dir:../../../..}/modules/ltr/lib/" regex=".*\.jar" />