VuFind uses Apache Solr as its search backend. All records—bibliographic, authority, and course reserves—are stored and searched in Solr indexes. This page covers starting and stopping Solr, importing MARC records using SolrMarc, customizing the XSLT transformation pipeline, rebuilding the full index, and maintaining the alphabetic browse index.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/vufind-org/vufind/llms.txt
Use this file to discover all available pages before exploring further.
Starting and stopping Solr
VuFind ships with a wrapper scriptsolr.sh that delegates to the standard Solr control script while applying VuFind-specific defaults.
- Linux / macOS
- Windows
Key environment variables
The following variables control howsolr.sh behaves. Set them in your shell or in a startup script before calling solr.sh.
| Variable | Default | Description |
|---|---|---|
SOLR_HEAP | 1G | JVM heap size (e.g. 2G, 512M) |
SOLR_PORT | 8983 | TCP port Solr listens on |
SOLR_HOME | $VUFIND_HOME/solr/vufind | Directory containing Solr core configs |
SOLR_LOGS_DIR | $SOLR_HOME/logs | Directory for Solr log files |
SOLR_ADDITIONAL_JVM_OPTIONS | (empty) | Extra JVM flags passed at startup |
SOLR_SECURITY_MANAGER_ENABLED defaults to false. The Java security manager is incompatible with the AlphaBrowse handler and must remain disabled for alphabetic browse to work.Solr cores
VuFind’s Solr home (solr/vufind/) contains four cores:
biblio— bibliographic recordsauthority— name/subject authority recordsreserves— course reserveswebsite— web content crawl results
Importing MARC records
import-marc.sh
import-marc.sh is the primary entry point for indexing binary MARC (.mrc) or MARCXML files. It invokes SolrMarc with the configured properties file and writes documents into the biblio core.
- The value of
-pif provided on the command line $VUFIND_LOCAL_DIR/import/import.propertiesif it exists$VUFIND_HOME/import/import.properties(bundled default)
import-marc-auth.sh
import-marc-auth.sh is a thin wrapper around import-marc.sh that switches the properties file to import_auth.properties, which targets the authority Solr core. Use it to index MARC 21 authority files.
import/ directory:
XSLT transformation pipeline
Properties files
SolrMarc uses.properties files to map MARC fields to Solr fields. The most important file for local customisation is marc_local.properties.
Always place local overrides in
$VUFIND_LOCAL_DIR/import/marc_local.properties, not in the base marc.properties. Changes to the base file will be overwritten on upgrade.Custom indexing scripts
Field-level Java and BeanShell scripts live inimport/index_scripts/. You can reference them from marc_local.properties to implement complex field logic without modifying the SolrMarc core.
Batch importing with harvest scripts
After an OAI-PMH harvest, useharvest/batch-import-marc.sh to process an entire harvest directory:
processed/ subdirectory and writes per-batch log files under log/.
Re-indexing and full rebuilds
Alphabetic browse index
VuFind supports A-to-Z browse for titles, authors, subjects, call numbers (LC and Dewey), and hierarchy. These browse indexes are built byindex-alphabetic-browse.sh, which extracts headings from the Solr biblio and authority cores, sorts them, and writes SQLite databases into solr/vufind/alphabetical_browse/.
| Browse type | Solr field | Authority-aware |
|---|---|---|
hierarchy | hierarchy_browse | Yes |
title | title_fullStr | No |
topic | topic_browse | Yes |
author | author_browse | Yes |
lcc | callnumber-raw | No |
dewey | dewey-raw | No |
The browse indexes must be rebuilt after any significant change to the biblio or authority cores. Schedule
index-alphabetic-browse.sh to run after nightly import jobs.How the build process works
Extract headings
PrintBrowseHeadings reads stored field values from the Solr Lucene index directory (solr/vufind/biblio/index) and writes a temporary tab-separated file.Build SQLite database
CreateBrowseSQLite converts the sorted file into a <type>_browse.db SQLite file.Managing the Solr index
Deleting individual records
Use theutil/deletes CLI command to remove a set of records by ID:
