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
COSINECosineThe tool creates Cosine by default
L2EuclidNot detected. Set --qdrant.distance-metric explicitly
IP (inner product)DotNot detected. Set --qdrant.distance-metric explicitly
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 from Zilliz Cloud

Zilliz Cloud endpoints use HTTPS, so pass the full URL and enable TLS authentication:

docker run --net=host --rm -it registry.cloud.qdrant.io/library/qdrant-migration milvus \
    --milvus.url 'https://your-cluster.cloud.zilliz.com' \
    --milvus.enable-tls-auth \
    --milvus.collection 'your-collection' \
    --milvus.api-key 'your-zilliz-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-metriccosineDistance metric per vector field (map format, e.g., field1=euclid;field2=dot). The tool does not read the metric from Milvus, so set it for every L2 or IP field

Gotchas

  • Partitions: The tool does not record which partition a point came from, so points from all migrated partitions are indistinguishable in the target collection.

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.