Skip to main content
Use the LambdaDB Migration CLI to migrate Qdrant collections into LambdaDB. The CLI inventories your Qdrant collection, generates an editable LambdaDB mapping, creates the target LambdaDB collection when needed, streams points as LambdaDB documents, saves local checkpoints, and validates migrated records before cutover. Qdrant models searchable records as points made of an id, one or more vectors, and an optional payload. LambdaDB models records as documents: each document is stored as JSON, while searchable fields are declared in the collection’s indexConfigs.

What the CLI supports

Qdrant multi-vectors and Manhattan distance collections require workload-specific review. The CLI detects them and rejects the default migration path instead of silently creating a misleading LambdaDB schema.

Step 1: Install the CLI

Install the latest release:
Install a specific version:
Check the Qdrant command:

Step 2: Set credentials

LambdaDB Cloud uses region-specific API base URLs. Use the base URL, project name, and project API key shown for your project in the LambdaDB Cloud console. Do not assume a global default URL or a fixed project name.
Set your LambdaDB connection values:
If your Qdrant deployment requires an API key, pass it with --qdrant.api-key.

Step 3: Generate inventory and mapping

Run the inventory command against the Qdrant gRPC endpoint:
The output includes the source inventory and an editable LambdaDB mapping:
Review the generated mapping before running the migration. In particular, check vector dimensions, vector similarities, payload index types, renamed dotted fields, and the target collection name.
Generated mappings set target.createCollection: true by default. With that setting, the migration creates the LambdaDB collection if it is missing and waits until it is ready before writing documents.

Step 4: Run a dry run

Use a dry run to validate the mapping and inspect the planned migration without writing documents:

Step 5: Run the migration

Run the migration with validation enabled:
Migration progress is written to stderr with accepted count, percent, batch size, rate, and elapsed time. The CLI stores checkpoints under .lambdadb-migration/checkpoints by default. If the command is interrupted, rerun the same command to resume. Use --migration.restart to ignore an existing checkpoint and start from the beginning. Use --migration.create-collection=false when the target LambdaDB collection already exists and the migration should not create it.

Step 6: Review validation

--migration.validate checks the accepted record count, fetches a sample of migrated documents from LambdaDB using strongly consistent reads, and compares sampled fields. --migration.validation-report writes the validation result as JSON. The report includes source count, accepted records, LambdaDB numDocs, sampled IDs, compared sample count, query overlap results, and validation errors.
numDocs is reported for visibility, but sample fetch and field comparison are the stronger validation checks for read-after-write confirmation.
For dense-vector migrations, add query overlap checks:
By default, --migration.query-overlap reports dense-vector overlap without failing the migration. Set --migration.query-overlap-min-ratio above 0 to require a minimum average overlap.

Mapping details

Use this distance mapping when creating LambdaDB vector fields: For a Qdrant point with a single dense vector:
Qdrant point
the CLI writes a LambdaDB document like this:
LambdaDB document
For Qdrant named vectors:
Qdrant point with named vectors
the CLI writes separate LambdaDB vector fields:
LambdaDB document
For Qdrant sparse vectors, the CLI converts indices and values to an object whose keys are index strings:
Qdrant sparse vector
LambdaDB sparse vector

Reduce application changes with SDK compatibility

After data is in LambdaDB, Python and TypeScript applications can use LambdaDB’s Qdrant compatibility clients as a bridge before rewriting every query to native LambdaDB APIs. The compatibility clients support common Qdrant-style calls such as collection creation, dense-vector upsert, dense-vector query, retrieve, delete, filtered scroll, and unfiltered count. They are not full Qdrant client replacements, and unsupported behavior raises an explicit error where possible.

Qdrant SDK compatibility

Use Python lambdadb.compat.qdrant or TypeScript @functional-systems/lambdadb/compat/qdrant to reduce application code changes.
A Qdrant query against a named vector:
Python
becomes a LambdaDB knn query:
Python
When using LambdaDB managed embeddings, send query text instead of a vector:
Python

Rewrite filters

Qdrant filters commonly use must, must_not, and should clauses. In LambdaDB, use a bool query when the filter logic is larger than a single query string.
Qdrant filter
LambdaDB bool query
Use field types intentionally: Qdrant hybrid queries often use prefetch plus RRF fusion across dense and sparse vectors.
Qdrant hybrid query
In LambdaDB, express the same dense/sparse fusion with rrf:
LambdaDB hybrid query
You can also combine lexical and vector relevance:
LambdaDB lexical + vector hybrid query

Common gotchas

  • IDs: LambdaDB document IDs are strings. Numeric Qdrant IDs are converted to strings during migration.
  • Field names: LambdaDB field names cannot contain dots. The generated mapping renames dotted Qdrant payload keys, such as metadata.url to metadata_url.
  • Schema: Qdrant can store payload without deciding every searchable field up front. In LambdaDB, decide which fields need indexes before migration.
  • Bulk writes: Regular upsert accepts request payloads up to 6 MB. Bulk upsert accepts up to 200 MB, but not for collections with managed embeddings.
  • Sparse vectors: Qdrant sparse vectors use separate indices and values; LambdaDB uses object key-value pairs.
  • Multi-vectors: Qdrant multi-vectors store matrices for late-interaction models. Plan and validate these workloads separately.
  • Consistency: LambdaDB uses eventual reads by default, but supports consistentRead for strong read-after-write checks. The CLI validation uses strongly consistent sample fetches. For bulk upsert, allow time for documents to become visible after indexing completes.

Next steps

Migration CLI

Review the shared LambdaDB Migration CLI workflow.

Qdrant SDK compatibility

Keep common Qdrant-style Python and TypeScript client calls while migrating application code.

Create a collection

Define LambdaDB index configurations for your migrated data.

Bulk upsert data

Load larger migrated datasets through the bulk upsert workflow.

Hybrid query

Combine lexical, dense vector, and sparse vector search.