
Milvus review
Distributed vector database that runs from a single container up to a Kubernetes cluster
Chandan Kumar is a founder of Geekflare. He is a technology enthusiast and entrepreneur who loves to help businesses and people around the world. Chandan has worked at BNP Paribas, Citibank, Deutsche Bank, Motorola, and HP. He’s got an in-depth understanding of business software and IT infrastructure.
Verdict
Milvus suits teams that expect large collections and want one system from a laptop to a Kubernetes cluster, with full-text, hybrid and disk-based search built in. The catch is the operating effort: a cluster runs etcd and object storage next to Milvus, and even standalone mode asks for 8 GB of RAM.
Best for
Teams planning for hundreds of millions of vectors or more on their own Kubernetes
Not for
Small projects that want one light binary with no extra services
Pros
- Runs as one container or as a cluster that scales compute and storage apart
- Wide index choice, including DiskANN, RaBitQ and GPU indexes
- BM25 full-text search and dense vectors in the same collection
- Partition-key multi-tenancy that covers millions of tenants
Cons
- Cluster mode needs etcd and object storage running alongside it
- Authentication is off until you enable it, and root starts with a default password
- Some 3.0 features, such as snapshots and TEXT fields, are off by default
“Milvus is an incredibly cool product”
Hacker News, Feb 2026“Milvus alone had two nasty CVEs recently”
Hacker News, Apr 2026
Is Milvus right for your project?
Describe what you need and AI will check the fit against this review.
Milvus features and capabilities
Search data where it already lives
Since 3.0, External Collections index Parquet, Lance, Iceberg and Vortex files in object storage and search them in place, so a data team does not have to copy a lakehouse table into Milvus first.
Full-text and hybrid search
BM25 full-text search, learned sparse vectors and dense vectors sit in one collection, so keyword and semantic results come back from a single query.
Index choice for each workload
HNSW, IVF, DiskANN, ScaNN and quantized variants such as IVF_RABITQ let you trade memory, speed and recall per collection, and DiskANN serves indexes bigger than RAM from SSD.
Schema changes without downtime
Columns can be added, backfilled and dropped while the collection keeps serving, so swapping in a new embedding model does not mean rebuilding the collection.
Server-side embeddings
The Function module sends text to providers such as OpenAI, Bedrock, Cohere or a Hugging Face TEI server and stores the vectors, so your application can insert and search with plain text.
- Hybrid searchCombines keyword and vector search in one query
- YesBM25 full-text and dense vectors in one query
- Built-in embeddingsTurns text into vectors for you, so you don't call an embedding API yourself
- YesFunction module calls an embedding provider or TEI server
- QuantizationCompresses vectors to cut memory
- YesSQ8, PQ, PRQ and RaBitQ index variants
- Disk-based indexServes indexes bigger than memory from SSD
- YesDiskANN and memory-mapped indexes
- Sharding and replicationSpreads data across nodes in the free version
- Yes
- Multi-tenancyKeeps each customer's data apart in one database
- YesDatabase, collection, partition or partition key
- Embedded modeRuns inside your app with no separate server
- YesMilvus Lite for Python, FLAT index only
At a glance
- Type
- Vector database
- Stack
- Go / C++
- Databases
- etcd, MinIO or S3-compatible storage
- SSO
- Paid only
- Roles and permissions
- Free edition
- Audit logs
- Paid only
Free vs paid editions
What you get when you self-host, and what needs a paid plan.
Milvus is free under Apache 2.0, including cluster mode, RBAC, full-text search and every index type. Zilliz Cloud, from the company behind Milvus, runs it as a service, and its Enterprise plan adds SAML single sign-on, audit logs, private endpoints and a 99.95% uptime SLA. Serverless clusters are billed by usage with a free tier, and Enterprise dedicated clusters start at $197 a month.
Self-hosting Milvus
Milvus standalone needs at least 8 GB of RAM, with 16 GB and 4 or more CPU cores recommended, an SSD, and a CPU with SSE4.2, AVX, AVX2 or AVX-512.
New cloud server to ready
35 s
Memory in use at idle
301 MB of 4 GB
Load and index 100,000 vectors
2 min 3 s, 2,556 MB peak
Recall@10
94.8%
Median search
8.6 ms
Slowest 5%
27.5 ms
Version tested
3.0.3 · Oct 19, 2026
- The official compose file starts etcd, MinIO and Milvus, and was ready in 35 seconds. It publishes MinIO on every network interface with the default minioadmin login, so I bound all ports to 127.0.0.1 first.
- Inserting 100,000 vectors took 33 seconds, the fastest here, and building the index another 90. Memory peaked at 2,556 MB and stayed near 2 GB with the collection loaded, on a server half the size the docs ask for.
- With the default AUTOINDEX it found 94.8% of the true top 10 at a median of 8.6 ms, but the slowest 5% of searches took over 27 ms.
- The built-in web UI on port 9091 shows the collections, running tasks, slow requests and the configuration.
# Official milvus-standalone-docker-compose.yaml from the v3.0.3 release,
# with every port bound to 127.0.0.1
from pymilvus import MilvusClient
client = MilvusClient(uri="http://127.0.0.1:19530")
client.create_collection("dbpedia", dimension=1536, metric_type="COSINE") # AUTOINDEX
for lo in range(0, 100_000, 1000): # vectors, titles: the 100,000 DBpedia rows
client.insert("dbpedia", [{"id": i, "vector": vectors[i].tolist(), "title": titles[i]}
for i in range(lo, lo + 1000)])
client.flush("dbpedia") # then wait until describe_index shows 0 pending rows
hits = client.search("dbpedia", data=[query.tolist()], limit=10)[0][
{"id": 1004, "distance": 0.879, "entity": {"title": "Apache HTTP Server"}},
{"id": 99963, "distance": 0.8611, "entity": {"title": "Web container"}},
{"id": 20767, "distance": 0.8566, "entity": {"title": "Java servlet"}},
{"id": 20383, "distance": 0.8537, "entity": {"title": "JavaServer Pages"}},
{"id": 396, "distance": 0.8526, "entity": {"title": "Apache Software Foundation"}}
]What you can do with Milvus
Search across a large document archive
Index hundreds of millions of chunks with DiskANN or a quantized index and serve keyword and semantic search from one cluster.
Vector search over a data lake
Point an External Collection at Parquet or Iceberg tables in S3 and search them without copying the data.
One collection for many customers
Use a partition key per customer so a SaaS product keeps each tenant's vectors apart in a shared collection.