milvus-3.0.0
- External Collection now supports external fields feeding function output fields such as BM25 sparse vectors, MinHash signatures, and text embeddings
- Add milvus-table external format that treats Milvus Snapshot metadata and Storage V3 manifests as an external source
- Support online schema evolution for external collections with additive schema evolution when external table gains new columns
- Support adding, backfilling, and dropping columns while serving continues without full-collection rebuilds
- Support external backfill for values computed outside Milvus and inner backfill for kernel-derived values like BM25 or MinHash functions
- Sparse index now includes inverted-list compression, configurable quantization, and per-workload search-algorithm selection
- StructArray now supports null values, bitmap indexes, dynamic field addition on live collections, and partial update of struct fields through upsert
- Element-level search adds hybrid search across vector sub-fields with configurable per-entity collapse and range search within it
- Nested filtering covers element_filter predicates, MATCH_ANY / MATCH_ALL / MATCH_LEAST / MATCH_MOST / MATCH_EXACT quantifiers, positional sub-field access, and array_length() function
- Faceted search on the search path returns top facet values with best-matching members in ANN ranking and aggregates such as COUNT and AVG
- Sparse vector index upgraded with new search algorithms including SINDI, Block-Max WAND, and Block-Max MaxScore
- SINDI is now the default for sparse IP search and MaxScore is the default for BM25 after new index version is enabled
v3.0.0
Release date: July 29, 2026
| Milvus Version | Python SDK Version | Node.js SDK Version | Java SDK Version | Go SDK Version |
|---|---|---|---|---|
| 3.0.0 | 3.0.1 | 3.0.3 | 3.0.5 | 3.0.0 |
Milvus 3.0.0 is officially released! Building on the lake-native architecture introduced in 3.0-beta, this release completes what the beta started: External Collection covers more lakehouse workflows; schema supports online add / backfill / drop; the sparse index is rebuilt around SINDI; StructArray and faceted search round out the retrieval engine; FAISS passthrough, and TEXT extend index and modality choices; and Woodpecker runs as a standalone service.
If you are new to the 3.0 line, the Core 3.0 features recall section below summarizes the capabilities introduced in 3.0-beta; the 3.0-beta release notes have the full write-ups.
What's new in 3.0.0 (since 3.0-beta)
External Collection: more complete lakehouse workflows
3.0-beta introduced External Collection: reference lake files in place, build indexes, and search them without copying data into Milvus. This release extends it toward complete lakehouse retrieval workflows. External fields can now feed function output fields such as BM25 sparse vectors, MinHash signatures, and text embeddings, so text and model-derived retrieval fields are built inside Milvus without copying the source table. Refresh also supports additive schema evolution: when the external table gains new columns, Milvus patches the affected segments instead of rebuilding the collection.
This release also adds a milvus-table external format that treats Milvus Snapshot metadata and Storage V3 manifests as an external source, so a collection snapshot can itself be served as an external table — batch and serving systems get a shared, manifest-backed view of the same data.
For more information, refer to Create an External Collection and Snapshots.
Flexible schema: add, backfill, and drop columns online
Schemas do not stay static in production — embedding models get replaced, features iterate, fields get deprecated — and these used to mean full-collection rebuilds with downtime or double-writes. 3.0.0 closes the loop: columns can be added, filled, and dropped while serving continues.
Backfill works in both directions. External backfill handles values computed outside Milvus: add a column, snapshot the collection as a consistent starting point, run the job offline, write the values back, and Milvus indexes the new column incrementally — an embedding-model upgrade across hundreds of millions of rows becomes a hot path with no downtime. Inner backfill covers kernel-derived values: attach a BM25 or MinHash function to an existing collection and its output field is computed over existing data automatically.
For more information, refer to Add Fields to an Existing Collection.
Sparse index overhaul: SINDI, Block-Max WAND, and Block-Max MaxScore
Milvus 3.0 upgrades the sparse vector index across the board. It introduces new search algorithms — SINDI, Block-Max WAND, and Block-Max MaxScore — along with inverted-list compression, configurable quantization, and per-workload search-algorithm selection. mmap loading, serialization, and BM25 scoring are also optimized, cutting index storage and loading overhead for large-scale sparse vector and full-text search. In internal benchmarks, the compressed BM25 index is roughly 3x smaller than the 2.6 sparse index at comparable recall, and SINDI reaches up to about 10x the QPS of MaxScore on learned sparse embeddings. Once the new index version is enabled (see Compatibility and behavior notes), SINDI is the default for sparse IP search, and MaxScore is the default for BM25.
StructArray coverage
StructArray now supports null values, bitmap indexes, dynamic field addition on live collections, and partial update of struct fields through upsert, with REST and bulk-import coverage to match.
Element-level search adds hybrid search across vector sub-fields with configurable per-entity collapse (max / sum / avg / top-k variants), plus range search and group-by within it. Nested filtering covers element_filter predicates, the MATCH_ANY / MATCH_ALL / MATCH_LEAST / MATCH_MOST / MATCH_EXACT quantifiers, positional sub-field access such as tags[0][name], and array_length() on the struct column.
For more information, refer to StructArray and StructArray Operators.
Search Aggregation and faceted search
Query Aggregation from the beta computes exact statistics over filtered data; 3.0.0 adds faceting on the search path. Specify a facet field at search time and Milvus returns the top facet values, each represented by its best-matching member in ANN ranking and annotated with aggregates such as COUNT and AVG — the faceted-search sidebar (brand, price range, attributes) in one request, instead of over-fetching and counting client-side.
Function Chain reranking
Reranking is now composable through the Function Chain API, which executes an ordered, typed pipeline as part of a single search request. A chain can combine early L0 rescoring on QueryNode with L2 post-reduction reranking on Proxy, supporting score transformation and combination, model-based reranking, sorting, and candidate trimming without client-side orchestration. This release also adds native XGBoost scoring for L0 reranking using UBJ models registered as FileResources, along with Hugging Face Inference Providers for server-managed text embedding and sentence-similarity reranking.
TEXT long-text fields
TEXT fields make long text first-class, with storage-side length limits removed: they support text_match, phrase_match, and BM25. Values under 64 KB stay inline; larger values go to partition-level LOB files in Vortex format, with the column storing only (file_id, offset) references. LOB files are shared across segments, so compaction moves references instead of rewriting text. For RAG this means retrieving vectors and source text from the same store in one IO — no external blob store to operate.
FAISS index passthrough
A new FAISS index type accepts arbitrary Faiss index-factory strings through the faiss_index_name parameter — IVF64,Flat, HNSW16,Flat, OPQ16,IVF64,PQ16x4 — with search parameters passed through, so Faiss recipes reproduce directly on Milvus.
Vortex and Lance format support
The storage layer gains two open columnar formats: Vortex as the next-generation internal format — adaptive encodings (dictionary, RLE, bit-packing, float-specific compression), zero-copy decompression, optimized for mixed vector + scalar workloads — and Lance alongside Parquet for open-ecosystem interchange. Vortex is set to become the default internal format, with filter pushdown and a local variant on the roadmap.
Woodpecker standalone deployment
Woodpecker, the WAL at the core of the streaming write path, can now be deployed as an independent service instead of embedded in other nodes — independent scaling, fault isolation, and observability, like any other microservice. This matters most for large clusters and high-write workloads.
Core 3.0 features recall
The features below were introduced in 3.0-beta and are part of 3.0.0; see the beta notes for the full write-ups.
- External Collection — query lakehouse data (Parquet, Lance, Iceberg, Vortex) in place: zero-copy, read-only, synced through incremental refresh.
- Snapshot — point-in-time read-only collection views by segment reference, with near-zero marginal storage.
- Storage V3 (Loon) — manifest-based columnar storage on object storage; the foundation for Snapshot and External Collection.
- Query / Search ORDER BY — server-side multi-field sorting with per-field ASC / DESC.
- Query Aggregation — COUNT / SUM / AVG / MIN / MAX with group-by, evaluated server-side.
- EmbList + DiskANN — on-disk multi-vector indexing for StructArray embedding lists, with acceleration paths such as Muvera and Lemur.
- MinHash function (doc-in, doc-out) — server-side MinHash signatures plus
MINHASH_LSHfor near-duplicate detection. - Nullable vectors — NULL on all six vector types; search skips NULL rows, and AddField extends to vector fields.
- Entity TTL — per-row expiration driven by a TIMESTAMPTZ field.
- FileResource — cluster-managed dictionaries, synonym lists, and stop-word lists for analyzers, BM25, and Text Match.
- Force Merge — operator-triggered segment compaction, in synchronous or asynchronous mode.
Compatibility and behavior notes
- Storage V3 (Loon) is disabled by default. Features that depend on it — such as Snapshot and TEXT fields — require enabling it manually via
common.storage.useLoonFFI. Storage V3 will be enabled by default in a later release. - 2.6 → 3.0 compatibility and rollback are guaranteed — a 3.0 deployment can be rolled back to 2.6. However, once you enable or use features that change the serialized data format (for example Storage V3), rollback is no longer possible.
- New index versions are opt-in for now. Newly introduced index algorithms require manually raising the target index version (
dataCoord.targetVecIndexVersionto 10,dataCoord.targetScalarIndexVersionto 4) before they take effect; a later release will enable them by default. - GPU images move to CUDA 12.9 and no longer preserve Ubuntu 20.04 GPU compatibility.