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
Step 1: Install the CLI
Follow Install the Migration CLI to install stablev0.1.8 using Homebrew or the standalone installer.
Check the Qdrant command:
Step 2: Set credentials
LambdaDB Cloud uses region-specific API base URLs. Use your project’s base URL and project name, together with a project API key created in its API Keys tab. Project creation does not automatically issue a key; save the full value when you create it, because it is shown only once. See API key management. Do not assume a global default URL or a fixed project name.
--qdrant.api-key.
Step 3: Generate inventory and mapping
Run the inventory command against the Qdrant gRPC endpoint:Generated mappings set
target.createCollection: true by default. With that setting, the migration creates the LambdaDB collection if it is missing, then begins writing documents. Transient write failures use the CLI’s retry policy; no collection-status polling is performed.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:.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.
Completed runs skip re-reading and uploading documents on rerun. To migrate new source data, use --migration.restart. See checkpoint and validation behavior, including locally saved validation samples.
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.--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
The Migration CLI generates this default distance mapping for dense vector fields:
For
Dot, verify that both stored vectors and query vectors have unit length before using the generated dot_product setting. If vector magnitudes contribute to relevance, set similarity: max_inner_product for that dense vector in the generated mapping file before creating the target collection. The CLI does not infer this choice from the source distance name. See dense-vector similarity requirements, and validate ranking and score thresholds after migration.
For a Qdrant point with a single dense vector:
Qdrant point
LambdaDB document
Qdrant point with named vectors
LambdaDB document
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.Rewrite vector search
A Qdrant query against a named vector:Python
knn query:
Python
Python
Rewrite filters
Qdrant filters commonly usemust, 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
Rewrite hybrid search
Qdrant hybrid queries often useprefetch plus RRF fusion across dense and sparse vectors.
Qdrant hybrid query
rrf:
LambdaDB hybrid query
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.urltometadata_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 native embeddings.
- Sparse vectors: Qdrant sparse vectors use separate
indicesandvalues; 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
consistentReadfor 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.