Solr Migration Checklist - What to Gather Before You Start

Migrations

Whichever way you migrate, the same facts decide how long it takes. Gather them first.

Whether you migrate yourself or hand it off to us, gather this first:

  1. Source core name. e.g. my_core.
  2. Current Solr version. Visit https://YOUR-CLUSTER/solr/CORE/admin/system?wt=json — the lucene.solr-spec-version field tells you exactly. Or check the Info tab of the index.
  3. Doc count. /select?q=*:*&rows=0&wt=json → response.numFound. Drives how long YOUR reindex will take.
  4. Source-of-truth confirmation. Where does the data come from? Database table, CMS API, crawler, ingestion API, file directory? Confirm it is reachable and complete BEFORE migration starts.
  5. Custom field types in schema.xml. Anything beyond stock types — custom solr.TextField chains, ICU collations, custom tokenizers, BBoxField, ExternalFileField — needs an explicit conversion decision.
  6. Custom request handlers in solrconfig.xml. Custom /select defaults, /suggest setups, custom spellcheck dictionaries, custom requestParser tweaks.
  7. Stopwords / synonyms / protected words. Every additional .txt file referenced from the schema.
  8. Application config locations. Where is the connection string? settings.php, wp-config.php, environment variable, Helm value? Cutover speed depends on this being trivial to flip.

Concrete commands for inventory and snapshot:

# Inventory the indexes on your account
curl -s "https://opensolr.com/solr_manager/api/get_index_list?email=YOU@EXAMPLE.COM&api_key=YOUR_API_KEY"

# List, then download every configuration file of the affected index
CORE=CORE_NAME; AUTH="email=YOU@EXAMPLE.COM&api_key=YOUR_API_KEY"
mkdir -p conf-$CORE
for f in $(curl -s "https://opensolr.com/solr_manager/api/get_all_config_files?$AUTH&core_name=$CORE" | python3 -c 'import json,sys; print("\n".join(json.loads(json.load(sys.stdin)["msg"])))'); do
  curl -s "https://opensolr.com/solr_manager/api/get_file?$AUTH&index_name=$CORE&file_name=${f%.*}&file_extension=${f##*.}" \
    | python3 -c 'import json,sys; print(json.load(sys.stdin)["msg"])' > "conf-$CORE/$f"
done

# Take a backup snapshot of the OLD index (archive only - cannot be restored across major versions)
curl -s "https://opensolr.com/solr_manager/api/create_backup?$AUTH&core_name=$CORE"

Solr migration

Checklist before you start (this page)