PermissiveApache-2.0Tested by Geekflare

Milvus review

Distributed vector database that runs from a single container up to a Kubernetes cluster

Data refreshedMethodologyHow we tested
Founder of Geekflare

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
What people say
Ask Sparkian

Is Milvus right for your project?

Describe what you need and AI will check the fit against this review.

Or try:

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.
Code we ran
# 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]
OutputPassed3.0.3 standalone · 100,000 vectors · same top 5 as an exact search
Request: client.search("dbpedia", data=[<embedding of the held-out "Apache Tomcat" article>], limit=5, output_fields=["title"]), distances rounded
[
  {"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"}}
]
System information in the Milvus 3.0.3 web UI

System information in the Milvus 3.0.3 web UI

System information in the Milvus 3.0.3 web UI
The dbpedia collection loaded in the Milvus web UI

The dbpedia collection loaded in the Milvus web UI

The dbpedia collection loaded in the Milvus web UI

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.