Lib 目录和指令

在此,我们介绍两种简单有效的方法,让 Solr 可以看到 Solr 插件的 .jar 文件。

此类文件有时简称为“库”或“库”。从本质上讲,你可以将它们放在一些特殊位置,或从你的配置中明确告知 Solr。

如果库之间存在重叠或相互依赖,则需要注意顺序。你可以将其视为自上而下搜索的堆栈。在顶部是按相反顺序排列的 lib 指令,然后是 Solr 核心库,然后是 Solr 主目录库,最后是 Solr 本身。

库目录

你可以将 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" />