Lib Directories and Directives
Here we describe two simple and effective methods to make the .jar
files for Solr plugins visible to Solr.
Such files are sometimes called "libraries" or "libs" for short. Essentially you can put them in some special places or explicitly tell Solr about them from your config.
If there is overlap or inter-dependencies between libraries, then pay attention to the order. You can think of it like a stack that is searched top-down. At the top are the lib directives in reverse order, then Solr core’s lib, then Solr home’s lib, then Solr itself.
Lib Directories
There are several special places you can place Solr plugin .jar
files:
-
<solr_home>/lib/
: The.jar
files placed here are available to all Solr cores running on the node, and to node level plugins referenced insolr.xml
— so basically everything. This directory is not present by default so you will need to create it. See Taking Solr to Production. -
<core_instance>/lib/
: In a user-managed cluster or a single-node installation, you may want to add plugins just for a specific Solr core. Create this adjacent to the<core_instance>/conf/
directory; it’s not present by default. -
<solr_install>/server/solr-webapp/webapp/WEB-INF/lib/
: The.jar
files for Solr itself and it’s dependencies live here. Certain plugins or add-ons to plugins require placement here, and they will have explicit documentation for this need. -
<solr_install>/server/lib/ext
: The.jar
files used for the Solr server as well as Solr Core/SolrJ.
Solr incorporates Jetty for providing HTTP server functionality.
Jetty has some directories that contain .jar
files for itself and its own plugins / modules or JVM level plugins (e.g., loggers).
Solr plugins won’t work in these locations.
Lib Directives in SolrConfig
Both plugin and resource file paths are configurable via <lib/>
directives in solrconfig.xml
.
When a directive matches a directory, then resources can be resolved from it.
When a directive matches a .jar
file, Solr plugins and their dependencies are resolved from it.
Resources can be placed in a .jar
too but that’s unusual.
It’s erroneous to refer to any other type of file.
A <lib/>
directive must have one (not both) of these two attributes:
-
path
: used to refer to a single directory (for resources) or file (for a plugin.jar
) -
dir
: used to refer to all direct descendants of the specified directory. Optionally supply aregex
attribute to filter these to those matching the regular expression.
All directories are resolved as relative to the Solr core’s instanceDir
.
These examples show how to load modules into 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" />