mirror of
https://github.com/qdrant/landing_page.git
synced 2026-10-03 01:48:32 +02:00
@@ -25,8 +25,11 @@ docker pull registry.cloud.qdrant.io/library/qdrant-migration
|
||||
| [pgvector](/documentation/migrate-to-qdrant/from-pgvector/) | `pg` | Yes |
|
||||
| [S3 Vectors](/documentation/migrate-to-qdrant/from-s3-vectors/) | `s3` | Yes |
|
||||
| [Chroma](/documentation/migrate-to-qdrant/from-chroma/) | `chroma` | Yes |
|
||||
|
||||
The tool also supports Redis, MongoDB, FAISS, Apache Solr, and [Qdrant-to-Qdrant](/documentation/tutorials-operations/migration/) migrations.
|
||||
| [Redis](/documentation/migrate-to-qdrant/from-redis/) | `redis` | No (must pre-create) |
|
||||
| [MongoDB](/documentation/migrate-to-qdrant/from-mongodb/) | `mongodb` | No (must pre-create) |
|
||||
| [FAISS](/documentation/migrate-to-qdrant/from-faiss/) | `faiss` | Yes |
|
||||
| [Apache Solr](/documentation/migrate-to-qdrant/from-solr/) | `solr` | No (must pre-create) |
|
||||
| [Qdrant](/documentation/migrate-to-qdrant/from-qdrant/) | `qdrant` | Yes |
|
||||
|
||||
Not seeing your current vector store? [Open an issue on GitHub](https://github.com/qdrant/migration/issues) and let us know!
|
||||
|
||||
|
||||
@@ -0,0 +1,65 @@
|
||||
---
|
||||
title: From FAISS
|
||||
weight: 90
|
||||
---
|
||||
|
||||
# Migrate from FAISS to Qdrant
|
||||
|
||||
## What You Need from FAISS
|
||||
|
||||
- **Index file path** — path to your FAISS index file
|
||||
- **Distance metric** — the metric used when the index was built (`l2`, `inner product`, etc.)
|
||||
|
||||
<aside role="alert"><strong>Important:</strong> Only non-quantized FAISS index types are supported. Quantized indexes (e.g., <code>IndexIVFPQ</code>) do not store the original vectors and cannot be migrated.</aside>
|
||||
|
||||
## Supported Index Types
|
||||
|
||||
| FAISS Index Type | Supported | Notes |
|
||||
| :--- | :--- | :--- |
|
||||
| `IndexFlatL2` | Yes | Maps to `euclid` distance |
|
||||
| `IndexFlatIP` | Yes | Maps to `dot` distance |
|
||||
| `IndexHNSWFlat` | Yes | Full vectors are stored |
|
||||
| `IndexIVFFlat` | Yes | Full vectors are stored |
|
||||
| `IndexIVFPQ` | No | Quantized — original vectors not stored |
|
||||
| `IndexPQ` | No | Quantized — original vectors not stored |
|
||||
|
||||
## Concept Mapping
|
||||
|
||||
| FAISS | Qdrant | Notes |
|
||||
| :--- | :--- | :--- |
|
||||
| Index | Collection | One-to-one mapping |
|
||||
| Vector (by position) | Point | Position in index becomes point ID |
|
||||
|
||||
## Run the Migration
|
||||
|
||||
```bash
|
||||
docker run --net=host --rm -it \
|
||||
-v /path/to/your/index:/data \
|
||||
registry.cloud.qdrant.io/library/qdrant-migration faiss \
|
||||
--faiss.index-path '/data/your-index.index' \
|
||||
--qdrant.url 'https://your-instance.cloud.qdrant.io:6334' \
|
||||
--qdrant.api-key 'your-qdrant-api-key' \
|
||||
--qdrant.collection 'your-collection' \
|
||||
--qdrant.distance-metric cosine
|
||||
```
|
||||
|
||||
### All FAISS-Specific Flags
|
||||
|
||||
| Flag | Required | Description |
|
||||
| :--- | :--- | :--- |
|
||||
| `--faiss.index-path` | Yes | Path to the FAISS index file (inside the container) |
|
||||
|
||||
### Qdrant-Side Options
|
||||
|
||||
| Flag | Default | Description |
|
||||
| :--- | :--- | :--- |
|
||||
| `--qdrant.distance-metric` | `cosine` | Distance metric: `cosine`, `dot`, `euclid`, or `manhattan` |
|
||||
|
||||
## Gotchas
|
||||
|
||||
- **No metadata:** FAISS indexes store only vectors. All points will have empty payloads. If you have a separate metadata store keyed by vector position, import that separately after migration.
|
||||
- **Point IDs:** Points are assigned IDs based on their position in the FAISS index. Use this to join with any external metadata store.
|
||||
|
||||
## Next Steps
|
||||
|
||||
After migration, verify your data arrived correctly with the [Migration Verification Guide](/documentation/migration-verification/).
|
||||
@@ -0,0 +1,76 @@
|
||||
---
|
||||
title: From MongoDB
|
||||
weight: 80
|
||||
---
|
||||
|
||||
# Migrate from MongoDB to Qdrant
|
||||
|
||||
## What You Need from MongoDB
|
||||
|
||||
- **Connection string** — MongoDB URI (e.g., `mongodb://user:pass@host:27017`)
|
||||
- **Database name** — the database containing your collection
|
||||
- **Collection name** — the collection to migrate
|
||||
- **Vector field names** — the names of fields that store vector embeddings
|
||||
|
||||
<aside role="alert"><strong>Important:</strong> MongoDB does not expose vector dimensions or distance metrics in a way the tool can read automatically. You must create the Qdrant collection manually before running the migration.</aside>
|
||||
|
||||
## Concept Mapping
|
||||
|
||||
| MongoDB | Qdrant | Notes |
|
||||
| :--- | :--- | :--- |
|
||||
| Collection | Collection | One-to-one mapping |
|
||||
| Document | Point | Each document becomes a point |
|
||||
| Vector field | Vector | Named vectors are preserved |
|
||||
| Non-vector fields | Payload | Direct mapping |
|
||||
| `_id` (ObjectID or string) | Point ID + Payload | Converted to UUID; original stored in payload |
|
||||
|
||||
## Run the Migration
|
||||
|
||||
```bash
|
||||
docker run --net=host --rm -it registry.cloud.qdrant.io/library/qdrant-migration mongodb \
|
||||
--mongodb.url 'mongodb://localhost:27017' \
|
||||
--mongodb.database 'your-database' \
|
||||
--mongodb.collection 'your-collection' \
|
||||
--mongodb.vector-fields 'embedding' \
|
||||
--qdrant.url 'https://your-instance.cloud.qdrant.io:6334' \
|
||||
--qdrant.api-key 'your-qdrant-api-key' \
|
||||
--qdrant.collection 'your-collection'
|
||||
```
|
||||
|
||||
### With Multiple Vector Fields
|
||||
|
||||
```bash
|
||||
docker run --net=host --rm -it registry.cloud.qdrant.io/library/qdrant-migration mongodb \
|
||||
--mongodb.url 'mongodb+srv://user:pass@cluster.mongodb.net' \
|
||||
--mongodb.database 'your-database' \
|
||||
--mongodb.collection 'your-collection' \
|
||||
--mongodb.vector-fields 'title_embedding,body_embedding' \
|
||||
--qdrant.url 'https://your-instance.cloud.qdrant.io:6334' \
|
||||
--qdrant.api-key 'your-qdrant-api-key' \
|
||||
--qdrant.collection 'your-collection' \
|
||||
--migration.create-collection false
|
||||
```
|
||||
|
||||
### All MongoDB-Specific Flags
|
||||
|
||||
| Flag | Required | Description |
|
||||
| :--- | :--- | :--- |
|
||||
| `--mongodb.url` | Yes | MongoDB connection string |
|
||||
| `--mongodb.database` | Yes | Database name |
|
||||
| `--mongodb.collection` | Yes | Collection name |
|
||||
| `--mongodb.vector-fields` | Yes | Comma-separated list of vector field names |
|
||||
|
||||
### Qdrant-Side Options
|
||||
|
||||
| Flag | Default | Description |
|
||||
| :--- | :--- | :--- |
|
||||
| `--qdrant.id-field` | `__id__` | Payload field name for original MongoDB `_id` values |
|
||||
|
||||
## Gotchas
|
||||
|
||||
- **Vector field names are required:** MongoDB has no schema-level marker for vector fields. You must explicitly list them via `--mongodb.vector-fields`.
|
||||
- **ID mapping:** MongoDB `_id` values (ObjectID or string) are converted to Qdrant UUIDs. The original value is stored in payload under `--qdrant.id-field`.
|
||||
|
||||
## Next Steps
|
||||
|
||||
After migration, verify your data arrived correctly with the [Migration Verification Guide](/documentation/migration-verification/).
|
||||
@@ -0,0 +1,99 @@
|
||||
---
|
||||
title: From Qdrant
|
||||
weight: 110
|
||||
---
|
||||
|
||||
# Migrate Between Qdrant Instances
|
||||
|
||||
Use the `qdrant` subcommand to copy a collection from one Qdrant instance to another — or between collections within the same instance. The tool automatically recreates the full collection schema (vector config, HNSW settings, quantization, sharding) on the target.
|
||||
|
||||
## What You Need
|
||||
|
||||
- **Source Qdrant URL** — gRPC endpoint of the source instance
|
||||
- **Target Qdrant URL** — gRPC endpoint of the target instance
|
||||
- **Source collection name**
|
||||
- **Target collection name** (must be different from source if using the same instance)
|
||||
- **API keys** — for each instance, if authentication is enabled
|
||||
|
||||
## Concept Mapping
|
||||
|
||||
| Source Qdrant | Target Qdrant | Notes |
|
||||
| :--- | :--- | :--- |
|
||||
| Collection | Collection | Recreated with exact schema |
|
||||
| Named vectors | Named vectors | All vector types preserved |
|
||||
| Sparse vectors | Sparse vectors | Direct mapping |
|
||||
| Payload | Payload | Direct mapping |
|
||||
| Payload indexes | Payload indexes | Recreated if `--target.ensure-payload-indexes` is `true` |
|
||||
| Shard keys | Shard keys | Recreated automatically |
|
||||
|
||||
## Run the Migration
|
||||
|
||||
### Between Two Instances
|
||||
|
||||
```bash
|
||||
docker run --net=host --rm -it registry.cloud.qdrant.io/library/qdrant-migration qdrant \
|
||||
--source.url 'http://source-instance:6334' \
|
||||
--source.api-key 'source-api-key' \
|
||||
--source.collection 'your-collection' \
|
||||
--target.url 'https://your-instance.cloud.qdrant.io:6334' \
|
||||
--target.api-key 'your-qdrant-api-key' \
|
||||
--target.collection 'your-collection'
|
||||
```
|
||||
|
||||
### Within the Same Instance
|
||||
|
||||
```bash
|
||||
docker run --net=host --rm -it registry.cloud.qdrant.io/library/qdrant-migration qdrant \
|
||||
--source.url 'http://localhost:6334' \
|
||||
--source.collection 'original-collection' \
|
||||
--target.url 'http://localhost:6334' \
|
||||
--target.collection 'new-collection'
|
||||
```
|
||||
|
||||
### With Parallel Workers
|
||||
|
||||
```bash
|
||||
docker run --net=host --rm -it registry.cloud.qdrant.io/library/qdrant-migration qdrant \
|
||||
--source.url 'http://source-instance:6334' \
|
||||
--source.api-key 'source-api-key' \
|
||||
--source.collection 'your-collection' \
|
||||
--target.url 'https://your-instance.cloud.qdrant.io:6334' \
|
||||
--target.api-key 'your-qdrant-api-key' \
|
||||
--target.collection 'your-collection' \
|
||||
--migration.num-workers 4
|
||||
```
|
||||
|
||||
### All Source Flags
|
||||
|
||||
| Flag | Required | Description |
|
||||
| :--- | :--- | :--- |
|
||||
| `--source.collection` | Yes | Source collection name |
|
||||
| `--source.url` | No | Source gRPC URL (default: `http://localhost:6334`) |
|
||||
| `--source.api-key` | No | API key for the source instance |
|
||||
| `--source.max-message-size` | No | Maximum gRPC message size in bytes (default: `33554432` = 32 MB) |
|
||||
|
||||
### All Target Flags
|
||||
|
||||
| Flag | Required | Description |
|
||||
| :--- | :--- | :--- |
|
||||
| `--target.collection` | Yes | Target collection name |
|
||||
| `--target.url` | No | Target gRPC URL (default: `http://localhost:6334`) |
|
||||
| `--target.api-key` | No | API key for the target instance |
|
||||
| `--target.ensure-payload-indexes` | No | Recreate payload indexes from source (default: `true`) |
|
||||
|
||||
### Parallel Worker Option
|
||||
|
||||
| Flag | Default | Description |
|
||||
| :--- | :--- | :--- |
|
||||
| `--migration.num-workers` | Number of CPU cores | Number of parallel workers for migration |
|
||||
|
||||
## Gotchas
|
||||
|
||||
- **Source and target must differ:** You cannot migrate a collection to itself.
|
||||
- **Parallel workers and resume:** Migration progress is tracked per worker. If you change `--migration.num-workers` between runs, the saved offsets are invalidated and the migration restarts from scratch. Use `--migration.restart` explicitly if you intentionally want to change the worker count.
|
||||
- **Large messages:** If you encounter gRPC message size errors, increase `--source.max-message-size`.
|
||||
- **Existing target collection:** If the target collection already exists, the tool uses it as-is without modifying the schema.
|
||||
|
||||
## Next Steps
|
||||
|
||||
After migration, verify your data arrived correctly with the [Migration Verification Guide](/documentation/migration-verification/).
|
||||
@@ -0,0 +1,77 @@
|
||||
---
|
||||
title: From Redis
|
||||
weight: 70
|
||||
---
|
||||
|
||||
# Migrate from Redis to Qdrant
|
||||
|
||||
## What You Need from Redis
|
||||
|
||||
- **Redis address** — host and port of your Redis instance
|
||||
- **FT index name** — the RediSearch full-text index that contains your vectors
|
||||
- **Authentication** — username and password, if configured
|
||||
|
||||
<aside role="alert"><strong>Important:</strong> Redis does not expose vector configurations (dimensions, distance metric) after an index is created. You must create the Qdrant collection manually before running the migration.</aside>
|
||||
|
||||
## Concept Mapping
|
||||
|
||||
| Redis | Qdrant | Notes |
|
||||
| :--- | :--- | :--- |
|
||||
| FT Index | Collection | One-to-one mapping |
|
||||
| Document | Point | Each document becomes a point |
|
||||
| Vector field | Vector | Named vectors are preserved |
|
||||
| Hash/JSON fields | Payload | Direct mapping |
|
||||
| Document key | Payload field | Stored via `--qdrant.id-field` |
|
||||
|
||||
## Run the Migration
|
||||
|
||||
```bash
|
||||
docker run --net=host --rm -it registry.cloud.qdrant.io/library/qdrant-migration redis \
|
||||
--redis.index 'your-ft-index' \
|
||||
--redis.addr 'localhost:6379' \
|
||||
--qdrant.url 'https://your-instance.cloud.qdrant.io:6334' \
|
||||
--qdrant.api-key 'your-qdrant-api-key' \
|
||||
--qdrant.collection 'your-collection'
|
||||
```
|
||||
|
||||
### With Authentication
|
||||
|
||||
```bash
|
||||
docker run --net=host --rm -it registry.cloud.qdrant.io/library/qdrant-migration redis \
|
||||
--redis.index 'your-ft-index' \
|
||||
--redis.addr 'your-redis-host:6379' \
|
||||
--redis.username 'your-username' \
|
||||
--redis.password 'your-password' \
|
||||
--qdrant.url 'https://your-instance.cloud.qdrant.io:6334' \
|
||||
--qdrant.api-key 'your-qdrant-api-key' \
|
||||
--qdrant.collection 'your-collection' \
|
||||
--migration.create-collection false
|
||||
```
|
||||
|
||||
### All Redis-Specific Flags
|
||||
|
||||
| Flag | Required | Description |
|
||||
| :--- | :--- | :--- |
|
||||
| `--redis.index` | Yes | RediSearch FT index name |
|
||||
| `--redis.addr` | No | Redis address (default: `localhost:6379`) |
|
||||
| `--redis.protocol` | No | Redis protocol version (default: `2`) |
|
||||
| `--redis.username` | No | Username for authentication |
|
||||
| `--redis.password` | No | Password for authentication |
|
||||
| `--redis.client-name` | No | Client name |
|
||||
| `--redis.db` | No | Database number |
|
||||
| `--redis.network` | No | Network type: `tcp` or `unix` (default: `tcp`) |
|
||||
|
||||
### Qdrant-Side Options
|
||||
|
||||
| Flag | Default | Description |
|
||||
| :--- | :--- | :--- |
|
||||
| `--qdrant.id-field` | `__id__` | Payload field name for original Redis document keys |
|
||||
|
||||
## Gotchas
|
||||
|
||||
- **Named vectors:** If your Redis index has multiple vector fields, all are migrated as named vectors. Ensure your pre-created Qdrant collection has a matching named vector configuration.
|
||||
- **ID mapping:** Redis document keys are converted to Qdrant point IDs. The original key is stored in the payload under `--qdrant.id-field`.
|
||||
|
||||
## Next Steps
|
||||
|
||||
After migration, verify your data arrived correctly with the [Migration Verification Guide](/documentation/migration-verification/).
|
||||
@@ -0,0 +1,74 @@
|
||||
---
|
||||
title: From Apache Solr
|
||||
weight: 100
|
||||
---
|
||||
|
||||
# Migrate from Apache Solr to Qdrant
|
||||
|
||||
## What You Need from Solr
|
||||
|
||||
- **Solr URL** — the base URL of your Solr instance (e.g., `http://localhost:8983`)
|
||||
- **Collection name** — the Solr collection to migrate
|
||||
- **Authentication** — username and password, if configured
|
||||
|
||||
<aside role="alert"><strong>Important:</strong> Solr does not reliably expose vector dimensions and distance metrics via its schema API. You must create the Qdrant collection manually before running the migration.</aside>
|
||||
|
||||
## Concept Mapping
|
||||
|
||||
| Solr | Qdrant | Notes |
|
||||
| :--- | :--- | :--- |
|
||||
| Collection | Collection | One-to-one mapping |
|
||||
| Document | Point | Each document becomes a point |
|
||||
| Dense vector field | Vector | Named vectors are preserved |
|
||||
| Non-vector fields | Payload | Direct mapping |
|
||||
| Document ID (`id` field) | Payload field | Stored via `--qdrant.id-field` |
|
||||
|
||||
## Run the Migration
|
||||
|
||||
```bash
|
||||
docker run --net=host --rm -it registry.cloud.qdrant.io/library/qdrant-migration solr \
|
||||
--solr.url 'http://localhost:8983' \
|
||||
--solr.collection 'your-collection' \
|
||||
--qdrant.url 'https://your-instance.cloud.qdrant.io:6334' \
|
||||
--qdrant.api-key 'your-qdrant-api-key' \
|
||||
--qdrant.collection 'your-collection'
|
||||
```
|
||||
|
||||
### With Authentication
|
||||
|
||||
```bash
|
||||
docker run --net=host --rm -it registry.cloud.qdrant.io/library/qdrant-migration solr \
|
||||
--solr.url 'https://your-solr-host:8983' \
|
||||
--solr.collection 'your-collection' \
|
||||
--solr.username 'your-username' \
|
||||
--solr.password 'your-password' \
|
||||
--qdrant.url 'https://your-instance.cloud.qdrant.io:6334' \
|
||||
--qdrant.api-key 'your-qdrant-api-key' \
|
||||
--qdrant.collection 'your-collection' \
|
||||
--migration.create-collection false
|
||||
```
|
||||
|
||||
### All Solr-Specific Flags
|
||||
|
||||
| Flag | Required | Description |
|
||||
| :--- | :--- | :--- |
|
||||
| `--solr.url` | Yes | Solr base URL (e.g., `http://localhost:8983`) |
|
||||
| `--solr.collection` | Yes | Solr collection name |
|
||||
| `--solr.username` | No | Username for basic authentication |
|
||||
| `--solr.password` | No | Password for basic authentication |
|
||||
| `--solr.insecure-skip-verify` | No | Skip TLS certificate verification (default: `false`) |
|
||||
|
||||
### Qdrant-Side Options
|
||||
|
||||
| Flag | Default | Description |
|
||||
| :--- | :--- | :--- |
|
||||
| `--qdrant.id-field` | `__id__` | Payload field name for original Solr document IDs |
|
||||
|
||||
## Gotchas
|
||||
|
||||
- **Named vectors:** If your Solr schema has multiple dense vector fields, all are migrated as named vectors. Ensure your pre-created collection has matching named vector configurations.
|
||||
- **ID mapping:** Solr document IDs (strings) are converted to Qdrant UUIDs. The original Solr ID is stored in payload under `--qdrant.id-field`.
|
||||
|
||||
## Next Steps
|
||||
|
||||
After migration, verify your data arrived correctly with the [Migration Verification Guide](/documentation/migration-verification/).
|
||||
@@ -53,12 +53,9 @@ docker run --net=host --rm -it registry.cloud.qdrant.io/library/qdrant-migration
|
||||
--weaviate.api-key 'your-weaviate-api-key' \
|
||||
--qdrant.url 'https://your-instance.cloud.qdrant.io:6334' \
|
||||
--qdrant.api-key 'your-qdrant-api-key' \
|
||||
--qdrant.collection 'your-collection' \
|
||||
--migration.create-collection false
|
||||
--qdrant.collection 'your-collection'
|
||||
```
|
||||
|
||||
<aside role="status">Note the <code>--migration.create-collection false</code> flag — since you pre-created the collection, the tool should skip auto-creation.</aside>
|
||||
|
||||
### All Weaviate-Specific Flags
|
||||
|
||||
| Flag | Required | Description |
|
||||
|
||||
Reference in New Issue
Block a user