Apache Solr 9 is the release that put vector search inside Solr itself, and the release that quietly deleted several classes a working Solr 8 configuration still names. Those two facts are the whole story: it unlocked everything Opensolr does with AI, and it is the reason a config file that booted for years can refuse to boot after one upgrade. Here is what Solr 9 added, what it deleted, what it only moved, and which Solr versions you can actually pick on Opensolr today.
Solr 9 in one picture. The bottom-left quadrant is the one most upgrade guides get wrong: those components were relocated, not deleted.
01 · DENSE VECTORS: THE FEATURE EVERYTHING ELSE RESTS ON
Solr 9.0 introduced the DenseVectorField field type and the {!knn} query parser. Before that release Solr could only match documents by the words they contained. After it, Solr can also match documents by meaning, by comparing an embedding of the query against embeddings stored in the index.
This is not a footnote on the Solr 9 feature list. It is the single reason every AI capability on Opensolr exists: Hybrid Search, AI Hints, the AI Document Reader, retrieval-augmented answers, and search by image all read from a dense vector field. None of them can run on a Solr 8 index, because there is no field type there to hold the vectors.
The Opensolr {!hybrid} parser scores a query twice and fuses the two rankings. The right-hand half of that fusion is pure Solr 9.
DenseVectorField
A field type that stores a fixed-length float vector per document, indexed with the HNSW graph structure from Lucene 9. You declare the dimension and the similarity function once, in the schema.
The {!knn} query parser
Takes a query vector and returns the topK nearest documents by cosine, dot product or Euclidean distance. It composes with filter queries, so vector recall and business rules coexist.
What it powers on Opensolr
Hybrid Search, AI Hints, the AI Document Reader, RAG answers and search by image. All of them are dense vector lookups underneath a friendlier name.
What Solr 8 and older cannot do
Nothing about vectors was backported. On Solr 7 or 8 there is no vector field, no {!knn}, and therefore no semantic recall of any kind. This is the concrete reason to move.
This is the definition that ships on an Opensolr dense index, taken from a live Solr 9 core on our own fleet:
<fieldType name="knn_vector" class="solr.DenseVectorField" vectorDimension="1024" similarityFunction="cosine"/> <field name="embeddings" type="knn_vector" indexed="true" stored="true"/>
02 · EVERYTHING ELSE SOLR 9 ADDED
Java 11 is the floor, Java 17 the recommendation
Solr 9 requires Java 11 as a minimum and is continuously tested against Java 11, 17 and 21. The reference guide names JRE 17 as the recommended version. Our Solr 9 servers run OpenJDK 11.
Lucene 9 underneath
Solr 9 is the first release built and shipped independently of Lucene, on Lucene 9. That is where the HNSW vector index, the faster BKD point trees and the smaller segment format come from.
Certificate authentication
A new Certificate Authentication Plugin allows end-to-end x509 client certificates for both authentication and authorization, alongside improved PKI internode security and ZooKeeper 3.7 with TLS.
Rate limiting and task management
Update and search requests can be throttled on usage metrics, and long-running tasks can be declared cancellable and trackable. Both are node-level protections that did not exist in Solr 8.
Node roles and pluggable replica placement
SolrCloud gained explicit overseer and data roles, and a pluggable Replica Placement API that replaced the removed autoscaling framework.
SQL in the Admin UI
The Admin UI can run SQL queries directly. The SQL engine itself moved into the sql module, so existing configurations keep working once the module is enabled.
Six new language stemmers
Snowball stemmers for Hindi, Indonesian, Nepali, Serbian, Tamil and Yiddish, plus a new Norwegian normalisation filter.
SolrJ on HTTP/2
CloudSolrClient now speaks HTTP/2 with a new builder. The older HttpSolrClient and LBHttpSolrClient without HTTP/2 support are deprecated, and the previous CloudSolrClient was renamed CloudLegacySolrClient.
Leader and follower, everywhere
The master and slave vocabulary is gone from configuration, metrics and the Admin UI. If you monitor Solr KPIs by metric name, those names changed.
03 · WHAT WAS REMOVED, AND WHAT ONLY MOVED
Solr 9 reorganised the old contribs into modules: separate jars, in their own directories, switched on by name. A component that became a module is still shipped, still maintained, and still supported. It simply is not on the classpath until you say so. Confusing a move with a deletion is the most common error in Solr 9 upgrade write-ups, and it used to be an error on this page.
SolrCell in Solr 8 and in Solr 9. Only the path and the switch changed.
Enabling a module is one line in the Solr environment file. This is what our own Solr 9 servers carry:
# solr.in.sh SOLR_MODULES=extraction,ltr
The module being on the classpath is only half of it. The /update/extract endpoint still has to be declared as a request handler in your solrconfig.xml, which you can edit yourself from the Configuration Files Editor in the Opensolr control panel. If you would rather not touch Tika at all, the Opensolr Web Crawler already extracts text from PDF, DOCX, ODT and XLSX for you and indexes the result.
| Component | Status in Solr 9 | What to do |
|---|---|---|
| SolrCell / Tika | Shipped, as the extraction module | Enable the module, declare /update/extract in solrconfig.xml |
| XSLTResponseWriter | Shipped, moved to the scripting module | Enable the scripting module, or return JSON and transform client-side |
| Script update processor | Shipped, renamed ScriptUpdateProcessorFactory in scripting | Rename the class and enable the module |
| JWT and Hadoop auth | Shipped, as the jwt-auth and hadoop-auth modules | Enable the module. Short class names still resolve |
| SQL, LTR, langid, HDFS | Shipped, as modules | Enable by name. No configuration changes needed |
| Data Import Handler | Removed from Solr, now a separate community project | Push documents with the update API, or use the crawler and the ingestion API |
| VelocityResponseWriter | Removed, including /browse and wt=velocity | Render results in your own application, or use a hosted search page |
| LRUCache, FastLRUCache, LFUCache | Removed from the jar | Drop the class attribute. CaffeineCache is the only implementation left |
| Cross Data Center Replication | Removed | Index into each environment, or replicate at the infrastructure layer |
| Autoscaling framework | Removed | Use Replica Placement Plugins |
| maxShardsPerNode | Removed | Use a placement strategy instead |
| SimpleFSDirectoryFactory | Removed | Switch to NIOFSDirectoryFactory |
| LegacyBM25SimilarityFactory | Removed | Use BM25SimilarityFactory and retune if scores shift |
| clusterstate.json | No longer read | Migrate the state format while still on Solr 8 |
04 · DEFAULTS THAT CHANGED UNDER YOUR CONFIGURATION
A Solr 9 upgrade rarely fails on a feature you use. It fails on a default you never set and never thought about. These are the ones that generate support tickets.
The most common Solr 9 boot failure, and the one-word fix. Full walkthrough in the FastLRUCache error page.
| Setting | Solr 8 | Solr 9 | Why it matters |
|---|---|---|---|
| Cache class | solr.FastLRUCache and friends | CaffeineCache only | Naming a removed class stops the core from loading at all |
| hl.method | original | unified | Highlight output and the parameters that affect it both change. storeOffsetsWithPositions is enough, term vectors are an expensive way to get the same result |
| maxBooleanClauses | 1024, checked at the top level | Enforced recursively | Wide edismax queries with synonym expansion that passed on Solr 8 can now trip the limit. Our cores are configured at 6500 |
| blockUnknown | false | true | Basic auth and JWT now reject unauthenticated requests by default. Backwards incompatible on purpose |
| Network binding | All interfaces | localhost | A fresh Solr 9 is not reachable from outside the machine until you say so. Embedded ZooKeeper is the same |
| Java security manager | Off | On | Custom plugins that touch the filesystem or the network may need a policy change |
| Atomic updates on child docs | Fell back on the route parameter | Requires the root field | Partial updates to nested documents fail silently differently than before |
| schemaVersion (from 9.7) | 1.6 | 1.7, docValues on by default | Most types that support docValues get them, and fields become uninvertible=false. Moving to 1.7 generally means a full reindex |
| lib directives (from 9.8) | Always honoured | Opt-in, deprecated | A lib tag is now ignored with a warning unless explicitly enabled, and goes away entirely in Solr 10 |
The docValues trap on text fields
docValues="true" on a solr.TextField is invalid and the core will not start: that field type does not support doc values. If you need to sort or facet on the text, copy it into a string field, or switch the type to solr.SortableTextField. Solr 9.7 turning docValues on by default makes this much easier to hit by accident.
You cannot add docValues without reindexing
Solr 8 let you retrofit doc values with UninvertDocValuesMergePolicy. Lucene 9 closed that door. Adding docValues to an existing field now means a full reindex, every time.
Reindex after any major upgrade
The Solr project recommends a complete reindex after every major version step, not just when the schema changes. Read Solr Best Practices before you plan it, and JVM tuning before you size it.
05 · WHICH SOLR VERSIONS OPENSOLR RUNS TODAY
Straight answer, no marketing: the newest Solr you can select when you create an index on Opensolr is 9.6. The public server pool also runs 9.4 and 9.0, the whole Solr 8 line, and a set of legacy servers going back to 3.6. Apache has since released Solr 10.0 as the current major, with 9.10.1 closing the 9.x line. We do not offer Solr 10. If you need it, tell us and we will discuss it, but no page on this site should imply it is a dropdown option today.
The real version pool behind the create-index dropdown, grouped by what each band can and cannot do.
Legacy versions being orderable is not the same claim as legacy versions being supported forever, and this page used to make the second one. Here is what is actually true.
Solr 3 through 7 are end of life upstream
Apache considers everything below 9.10 end of life. No security patches, no bug fixes, and community help is hard to find. Anything we do for those versions, we do alone.
Legacy servers can still be selected
They appear in the create-index dropdown and they run. That is the extent of the promise: an index on a legacy server keeps serving until its hardware is retired.
Old hardware is being retired, with notice
The machines running the oldest Solr versions are being decommissioned. If your index sits on one, you get an email naming the affected cores and a cutoff date. Nobody is cut off without warning, and the date is negotiable if you ask early.
There is no in-place upgrade
Lucene reads segments from one major version back and no further. A Solr 5, 6 or 7 index cannot be opened by Solr 9 at all. Upgrading always means a new core plus a full reindex from your source of truth.
Configuration moves. Data does not.
We convert schema.xml and solrconfig.xml for you. We never migrate documents, because the format makes it impossible. Reindexing is your side of the job, on every route.
Config migration is a paid service
Flat 85 EUR per index, one time, delivered in under four business hours. The old core keeps serving traffic in parallel the whole time.
06 · MOVING AN OLD INDEX ONTO SOLR 9
Three routes, described in full in the Solr migration guide. All three end with you reindexing, and all three run the old and the new index side by side until you are satisfied.
We convert the configuration
You send the index name and the target major version, we hand back a provisioned Solr 8 or 9 index with your schema and solrconfig converted, validated and loading. 85 EUR per index, under four business hours.
Brand new index, modern defaults
If your schema is close to stock, skip the conversion entirely. Create a fresh index on a Solr 9 server and accept the default schema, which already ships PointFields, leader and follower terminology, unified highlighting and, on a dense index, the vector field.
Convert it yourself
The migration guide carries the full schema.xml and solrconfig.xml conversion tables, field type by field type and handler by handler, plus a cursorMark dump script for the case where the old index is your only remaining copy of the data.
Start on Solr 9
Create an index on a Solr 9 server and you get dense vectors, hybrid search and the AI features that depend on them. Sitting on an older version? Send us the index name and we will price the move.
Create a free indexRead the migration guideTalk to us