schema.xml Conversion Table for a Solr Upgrade

Migrations

Every schema.xml element that will not load, or behaves differently, on a current Solr version, with what replaces it.

Every cell below is something that will break if you carry it forward unchanged. PointFields are not a drop-in for TrieFields — the analyzer disappears, the term encoding is different, and docValues="true" is required if you want to facet, sort, or group.

Old (Solr 5.x — 7.x)  →  New (Solr 8.x / 9.x)
Old
solr.TrieIntField
New
solr.IntPointField
Notes
Drop precisionStep. Add docValues="true" to keep faceting / sort.
Old
solr.TrieLongField
New
solr.LongPointField
Notes
Same.
Old
solr.TrieFloatField
New
solr.FloatPointField
Notes
Same.
Old
solr.TrieDoubleField
New
solr.DoublePointField
Notes
Same.
Old
solr.TrieDateField
New
solr.DatePointField
Notes
Solr 9 rejects timezone offsets at insert time (see dates, spatial and docValues). Convert all timestamps to UTC + Z first.
Old
solr.LatLonType
New
solr.LatLonPointSpatialField
Notes
Drop subFieldSuffix. The hidden _coordinate subfields are gone.
Old
solr.SpatialRecursivePrefixTreeFieldType
New
solr.SpatialRecursivePrefixTreeFieldType
Notes
Still works in 9.x. Switch to LatLonPointSpatialField if you only need point geometry.
Old
solr.ExternalFileField
New
REMOVED in Solr 10
Notes
Still present in 9.x. Plan replacement (payloads, function queries on a stored field) before 10.
Old
solr.CurrencyField
New
solr.CurrencyFieldType
Notes
Renamed in 7.0. Old name still loads with a deprecation warning.
Old
<defaultSearchField>
New
REMOVED in Solr 7
Notes
Pass df=fieldname per request, or set in /select handler defaults.
Old
<solrQueryParser defaultOperator="OR"/>
New
REMOVED in Solr 7
Notes
Use q.op=AND per request, or <str name="q.op"> in handler defaults.
Old
Schema version 1.5 / 1.6
New
Schema version 1.7
Notes
Bump <schema name="..." version="1.7">.
Old
_version_ field optional
New
_version_ field mandatory
Notes
If missing, add: <field name="_version_" type="plong" indexed="true" stored="true"/>.

Side-by-side example of the most common conversions:

<!-- BEFORE: Solr 5.x / 6.x / 7.x schema.xml -->
<fieldType name="int"    class="solr.TrieIntField"    precisionStep="0" positionIncrementGap="0"/>
<fieldType name="long"   class="solr.TrieLongField"   precisionStep="0" positionIncrementGap="0"/>
<fieldType name="float"  class="solr.TrieFloatField"  precisionStep="0" positionIncrementGap="0"/>
<fieldType name="double" class="solr.TrieDoubleField" precisionStep="0" positionIncrementGap="0"/>
<fieldType name="date"   class="solr.TrieDateField"   precisionStep="0" positionIncrementGap="0"/>
<fieldType name="location" class="solr.LatLonType" subFieldSuffix="_coordinate"/>

<!-- AFTER: Solr 8.x / 9.x schema.xml -->
<fieldType name="pint"    class="solr.IntPointField"    docValues="true"/>
<fieldType name="plong"   class="solr.LongPointField"   docValues="true"/>
<fieldType name="pfloat"  class="solr.FloatPointField"  docValues="true"/>
<fieldType name="pdouble" class="solr.DoublePointField" docValues="true"/>
<fieldType name="pdate"   class="solr.DatePointField"   docValues="true"/>
<fieldType name="location_rpt" class="solr.SpatialRecursivePrefixTreeFieldType"
           geo="true" distErrPct="0.025" maxDistErr="0.001" distanceUnits="kilometers"/>

Solr migration

schema.xml conversion table (this page)