Migrate from Milvus to Qdrant

What You Need from Milvus

  • Milvus URL — the gRPC endpoint of your Milvus instance
  • Collection name — the collection to migrate
  • API key — if using Zilliz Cloud or authenticated Milvus

Concept Mapping

MilvusQdrantNotes
CollectionCollectionOne-to-one mapping
PartitionPayload field or separate collectionUse --milvus.partitions to specify which partitions to migrate
Schema fieldsPayloadNon-vector fields become payload
COSINECosineDirect mapping
L2EuclidDirect mapping
IP (inner product)DotDirect mapping
Dynamic fieldsPayloadJSON-typed dynamic fields are preserved

Run the Migration

docker run --net=host --rm -it registry.cloud.qdrant.io/library/qdrant-migration milvus \
    --milvus.url 'your-milvus-host:19530' \
    --milvus.collection 'your-collection' \
    --milvus.api-key 'your-milvus-api-key' \
    --qdrant.url 'https://your-instance.cloud.qdrant.io:6334' \
    --qdrant.api-key 'your-qdrant-api-key' \
    --qdrant.collection 'your-collection'

Migrating Specific Partitions

docker run --net=host --rm -it registry.cloud.qdrant.io/library/qdrant-migration milvus \
    --milvus.url 'your-milvus-host:19530' \
    --milvus.collection 'your-collection' \
    --milvus.partitions 'partition_a,partition_b' \
    --qdrant.url 'https://your-instance.cloud.qdrant.io:6334' \
    --qdrant.api-key 'your-qdrant-api-key' \
    --qdrant.collection 'your-collection'

All Milvus-Specific Flags

FlagRequiredDescription
--milvus.urlYesMilvus gRPC endpoint
--milvus.collectionYesCollection name to migrate
--milvus.api-keyNoAPI key (for Zilliz Cloud)
--milvus.usernameNoUsername for authentication
--milvus.passwordNoPassword for authentication
--milvus.db-nameNoDatabase name
--milvus.partitionsNoComma-separated partition names
--milvus.server-versionNoOverride detected server version
--milvus.enable-tls-authNoEnable TLS authentication

Qdrant-Side Options

FlagDefaultDescription
--qdrant.distance-metricDistance metric per vector field (map format, e.g., field1:cosine,field2:dot)

Gotchas

  • Partition handling: Milvus partitions can map to Qdrant collections or payload filters. If you merge partitions into a single collection, add a partition name as a payload field for filtering.
  • Schema strictness: Milvus enforces schema on write; Qdrant is schema-flexible. Verify that the schema-less flexibility didn’t cause payload fields to drift during migration.
  • Dynamic fields: Milvus dynamic fields (introduced in 2.3) may serialize differently. Check that JSON-typed dynamic fields survived the migration with correct structure.

Next Steps

After migration, verify your data arrived correctly with the Migration Verification Guide.

Was this page useful?

Thank you for your feedback! 🙏

We are sorry to hear that. 😔 You can edit this page on GitHub, or create a GitHub issue.