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" />