<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Migration Tool on Qdrant - Vector Search Engine</title><link>https://deploy-preview-2256--condescending-goldwasser-91acf0.netlify.app/documentation/migrate-to-qdrant/</link><description>Recent content in Migration Tool on Qdrant - Vector Search Engine</description><generator>Hugo</generator><language>en-us</language><managingEditor>info@qdrant.tech (Andrey Vasnetsov)</managingEditor><webMaster>info@qdrant.tech (Andrey Vasnetsov)</webMaster><atom:link href="https://deploy-preview-2256--condescending-goldwasser-91acf0.netlify.app/documentation/migrate-to-qdrant/index.xml" rel="self" type="application/rss+xml"/><item><title>From Pinecone</title><link>https://deploy-preview-2256--condescending-goldwasser-91acf0.netlify.app/documentation/migrate-to-qdrant/from-pinecone/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>info@qdrant.tech (Andrey Vasnetsov)</author><guid>https://deploy-preview-2256--condescending-goldwasser-91acf0.netlify.app/documentation/migrate-to-qdrant/from-pinecone/</guid><description>&lt;h1 id="migrate-from-pinecone-to-qdrant">Migrate from Pinecone to Qdrant&lt;/h1>
&lt;h2 id="what-you-need-from-pinecone">What You Need from Pinecone&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>API key&lt;/strong> — from the &lt;a href="https://app.pinecone.io/" target="_blank" rel="noopener nofollow">Pinecone console&lt;/a>&lt;/li>
&lt;li>&lt;strong>Index name&lt;/strong> — the name of the index to migrate&lt;/li>
&lt;li>&lt;strong>Index host URL&lt;/strong> — the host endpoint shown in your index dashboard&lt;/li>
&lt;/ul>
&lt;aside role="status">Only Pinecone &lt;strong>serverless&lt;/strong> indexes support listing all vectors for migration. Legacy pod-based indexes may require additional steps.&lt;/aside>
&lt;h2 id="concept-mapping">Concept Mapping&lt;/h2>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th style="text-align: left">Pinecone&lt;/th>
 &lt;th style="text-align: left">Qdrant&lt;/th>
 &lt;th style="text-align: left">Notes&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td style="text-align: left">Index&lt;/td>
 &lt;td style="text-align: left">Collection&lt;/td>
 &lt;td style="text-align: left">One-to-one mapping&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">Namespace&lt;/td>
 &lt;td style="text-align: left">Payload field or separate collection&lt;/td>
 &lt;td style="text-align: left">No direct equivalent — the tool migrates all namespaces. Use &lt;code>--pinecone.namespace&lt;/code> to migrate a specific one&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">Metadata&lt;/td>
 &lt;td style="text-align: left">Payload&lt;/td>
 &lt;td style="text-align: left">Direct mapping&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">Sparse values&lt;/td>
 &lt;td style="text-align: left">Sparse vectors&lt;/td>
 &lt;td style="text-align: left">Mapped to &lt;code>sparse_vector&lt;/code> named vector by default&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>cosine&lt;/code>&lt;/td>
 &lt;td style="text-align: left">&lt;code>Cosine&lt;/code>&lt;/td>
 &lt;td style="text-align: left">Direct mapping&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>dotproduct&lt;/code>&lt;/td>
 &lt;td style="text-align: left">&lt;code>Dot&lt;/code>&lt;/td>
 &lt;td style="text-align: left">Pinecone requires unit-normalized vectors for dotproduct&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>euclidean&lt;/code>&lt;/td>
 &lt;td style="text-align: left">&lt;code>Euclid&lt;/code>&lt;/td>
 &lt;td style="text-align: left">Direct mapping&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h2 id="run-the-migration">Run the Migration&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">docker run --net&lt;span class="o">=&lt;/span>host --rm -it registry.cloud.qdrant.io/library/qdrant-migration pinecone &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --pinecone.index-host &lt;span class="s1">&amp;#39;https://your-index-host.pinecone.io&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --pinecone.index-name &lt;span class="s1">&amp;#39;your-index&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --pinecone.api-key &lt;span class="s1">&amp;#39;pcsk_...&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --qdrant.url &lt;span class="s1">&amp;#39;https://your-instance.cloud.qdrant.io:6334&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --qdrant.api-key &lt;span class="s1">&amp;#39;your-qdrant-api-key&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --qdrant.collection &lt;span class="s1">&amp;#39;your-collection&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="migrating-a-specific-namespace">Migrating a Specific Namespace&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">docker run --net&lt;span class="o">=&lt;/span>host --rm -it registry.cloud.qdrant.io/library/qdrant-migration pinecone &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --pinecone.index-host &lt;span class="s1">&amp;#39;https://your-index-host.pinecone.io&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --pinecone.index-name &lt;span class="s1">&amp;#39;your-index&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --pinecone.api-key &lt;span class="s1">&amp;#39;pcsk_...&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --pinecone.namespace &lt;span class="s1">&amp;#39;my-namespace&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --qdrant.url &lt;span class="s1">&amp;#39;https://your-instance.cloud.qdrant.io:6334&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --qdrant.api-key &lt;span class="s1">&amp;#39;your-qdrant-api-key&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --qdrant.collection &lt;span class="s1">&amp;#39;your-collection&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="all-pinecone-specific-flags">All Pinecone-Specific Flags&lt;/h3>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th style="text-align: left">Flag&lt;/th>
 &lt;th style="text-align: left">Required&lt;/th>
 &lt;th style="text-align: left">Description&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>--pinecone.index-name&lt;/code>&lt;/td>
 &lt;td style="text-align: left">Yes&lt;/td>
 &lt;td style="text-align: left">Name of the Pinecone index&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>--pinecone.index-host&lt;/code>&lt;/td>
 &lt;td style="text-align: left">Yes&lt;/td>
 &lt;td style="text-align: left">Host URL of the Pinecone index&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>--pinecone.api-key&lt;/code>&lt;/td>
 &lt;td style="text-align: left">Yes&lt;/td>
 &lt;td style="text-align: left">Pinecone API key&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>--pinecone.namespace&lt;/code>&lt;/td>
 &lt;td style="text-align: left">No&lt;/td>
 &lt;td style="text-align: left">Specific namespace to migrate&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>--pinecone.service-host&lt;/code>&lt;/td>
 &lt;td style="text-align: left">No&lt;/td>
 &lt;td style="text-align: left">Custom Pinecone service host&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h3 id="qdrant-side-options">Qdrant-Side Options&lt;/h3>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th style="text-align: left">Flag&lt;/th>
 &lt;th style="text-align: left">Default&lt;/th>
 &lt;th style="text-align: left">Description&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>--qdrant.id-field&lt;/code>&lt;/td>
 &lt;td style="text-align: left">&lt;code>__id__&lt;/code>&lt;/td>
 &lt;td style="text-align: left">Payload field name for original Pinecone IDs&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>--qdrant.sparse-vector&lt;/code>&lt;/td>
 &lt;td style="text-align: left">&lt;code>sparse_vector&lt;/code>&lt;/td>
 &lt;td style="text-align: left">Named vector for Pinecone sparse values&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h2 id="gotchas">Gotchas&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>Score scaling:&lt;/strong> Pinecone cosine similarity returns values in [0, 1] (rescaled). Qdrant returns [-1, 1]. Rankings are identical, but raw scores won&amp;rsquo;t match.&lt;/li>
&lt;li>&lt;strong>Metadata size limits:&lt;/strong> Pinecone limits metadata to 40KB per vector. Qdrant has no per-payload size limit, so data is preserved as-is.&lt;/li>
&lt;li>&lt;strong>Namespace strategy:&lt;/strong> If you have multiple namespaces, decide upfront whether to merge them into a single Qdrant collection (using a &lt;code>namespace&lt;/code> payload field for filtering) or create separate collections.&lt;/li>
&lt;/ul>
&lt;h2 id="next-steps">Next Steps&lt;/h2>
&lt;p>After migration, verify your data arrived correctly with the &lt;a href="https://deploy-preview-2256--condescending-goldwasser-91acf0.netlify.app/documentation/migration-guidance/">Migration Verification Guide&lt;/a>.&lt;/p></description></item><item><title>From Weaviate</title><link>https://deploy-preview-2256--condescending-goldwasser-91acf0.netlify.app/documentation/migrate-to-qdrant/from-weaviate/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>info@qdrant.tech (Andrey Vasnetsov)</author><guid>https://deploy-preview-2256--condescending-goldwasser-91acf0.netlify.app/documentation/migrate-to-qdrant/from-weaviate/</guid><description>&lt;h1 id="migrate-from-weaviate-to-qdrant">Migrate from Weaviate to Qdrant&lt;/h1>
&lt;h2 id="what-you-need-from-weaviate">What You Need from Weaviate&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>Host URL&lt;/strong> — the Weaviate instance address&lt;/li>
&lt;li>&lt;strong>Class name&lt;/strong> — the class to migrate&lt;/li>
&lt;li>&lt;strong>Authentication&lt;/strong> — API key, username/password, or bearer token depending on your setup&lt;/li>
&lt;li>&lt;strong>Vector dimensions&lt;/strong> — Weaviate does not expose vector dimensions through its API, so you must know this value&lt;/li>
&lt;/ul>
&lt;aside role="alert">&lt;strong>Important:&lt;/strong> Because Weaviate does not expose vector dimensions, the migration tool cannot auto-create the Qdrant collection. You must create the collection manually before running the migration.&lt;/aside>
&lt;h2 id="pre-create-your-qdrant-collection">Pre-Create Your Qdrant Collection&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">curl -X PUT &lt;span class="s1">&amp;#39;https://your-instance.cloud.qdrant.io:6333/collections/your-collection&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> -H &lt;span class="s1">&amp;#39;api-key: your-qdrant-api-key&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> -H &lt;span class="s1">&amp;#39;Content-Type: application/json&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> -d &lt;span class="s1">&amp;#39;{
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s1"> &amp;#34;vectors&amp;#34;: {
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s1"> &amp;#34;size&amp;#34;: 384,
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s1"> &amp;#34;distance&amp;#34;: &amp;#34;Cosine&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s1"> }
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s1"> }&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Replace &lt;code>384&lt;/code> with your actual vector dimensions. Set the distance metric to match your Weaviate configuration.&lt;/p></description></item><item><title>From Milvus</title><link>https://deploy-preview-2256--condescending-goldwasser-91acf0.netlify.app/documentation/migrate-to-qdrant/from-milvus/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>info@qdrant.tech (Andrey Vasnetsov)</author><guid>https://deploy-preview-2256--condescending-goldwasser-91acf0.netlify.app/documentation/migrate-to-qdrant/from-milvus/</guid><description>&lt;h1 id="migrate-from-milvus-to-qdrant">Migrate from Milvus to Qdrant&lt;/h1>
&lt;h2 id="what-you-need-from-milvus">What You Need from Milvus&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>Milvus URL&lt;/strong> — the gRPC endpoint of your Milvus instance&lt;/li>
&lt;li>&lt;strong>Collection name&lt;/strong> — the collection to migrate&lt;/li>
&lt;li>&lt;strong>API key&lt;/strong> — if using Zilliz Cloud or authenticated Milvus&lt;/li>
&lt;/ul>
&lt;h2 id="concept-mapping">Concept Mapping&lt;/h2>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th style="text-align: left">Milvus&lt;/th>
 &lt;th style="text-align: left">Qdrant&lt;/th>
 &lt;th style="text-align: left">Notes&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td style="text-align: left">Collection&lt;/td>
 &lt;td style="text-align: left">Collection&lt;/td>
 &lt;td style="text-align: left">One-to-one mapping&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">Partition&lt;/td>
 &lt;td style="text-align: left">Payload field or separate collection&lt;/td>
 &lt;td style="text-align: left">Use &lt;code>--milvus.partitions&lt;/code> to specify which partitions to migrate&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">Schema fields&lt;/td>
 &lt;td style="text-align: left">Payload&lt;/td>
 &lt;td style="text-align: left">Non-vector fields become payload&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>COSINE&lt;/code>&lt;/td>
 &lt;td style="text-align: left">&lt;code>Cosine&lt;/code>&lt;/td>
 &lt;td style="text-align: left">Direct mapping&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>L2&lt;/code>&lt;/td>
 &lt;td style="text-align: left">&lt;code>Euclid&lt;/code>&lt;/td>
 &lt;td style="text-align: left">Direct mapping&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>IP&lt;/code> (inner product)&lt;/td>
 &lt;td style="text-align: left">&lt;code>Dot&lt;/code>&lt;/td>
 &lt;td style="text-align: left">Direct mapping&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">Dynamic fields&lt;/td>
 &lt;td style="text-align: left">Payload&lt;/td>
 &lt;td style="text-align: left">JSON-typed dynamic fields are preserved&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h2 id="run-the-migration">Run the Migration&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">docker run --net&lt;span class="o">=&lt;/span>host --rm -it registry.cloud.qdrant.io/library/qdrant-migration milvus &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --milvus.url &lt;span class="s1">&amp;#39;your-milvus-host:19530&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --milvus.collection &lt;span class="s1">&amp;#39;your-collection&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --milvus.api-key &lt;span class="s1">&amp;#39;your-milvus-api-key&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --qdrant.url &lt;span class="s1">&amp;#39;https://your-instance.cloud.qdrant.io:6334&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --qdrant.api-key &lt;span class="s1">&amp;#39;your-qdrant-api-key&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --qdrant.collection &lt;span class="s1">&amp;#39;your-collection&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="migrating-specific-partitions">Migrating Specific Partitions&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">docker run --net&lt;span class="o">=&lt;/span>host --rm -it registry.cloud.qdrant.io/library/qdrant-migration milvus &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --milvus.url &lt;span class="s1">&amp;#39;your-milvus-host:19530&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --milvus.collection &lt;span class="s1">&amp;#39;your-collection&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --milvus.partitions &lt;span class="s1">&amp;#39;partition_a,partition_b&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --qdrant.url &lt;span class="s1">&amp;#39;https://your-instance.cloud.qdrant.io:6334&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --qdrant.api-key &lt;span class="s1">&amp;#39;your-qdrant-api-key&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --qdrant.collection &lt;span class="s1">&amp;#39;your-collection&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="all-milvus-specific-flags">All Milvus-Specific Flags&lt;/h3>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th style="text-align: left">Flag&lt;/th>
 &lt;th style="text-align: left">Required&lt;/th>
 &lt;th style="text-align: left">Description&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>--milvus.url&lt;/code>&lt;/td>
 &lt;td style="text-align: left">Yes&lt;/td>
 &lt;td style="text-align: left">Milvus gRPC endpoint&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>--milvus.collection&lt;/code>&lt;/td>
 &lt;td style="text-align: left">Yes&lt;/td>
 &lt;td style="text-align: left">Collection name to migrate&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>--milvus.api-key&lt;/code>&lt;/td>
 &lt;td style="text-align: left">No&lt;/td>
 &lt;td style="text-align: left">API key (for Zilliz Cloud)&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>--milvus.username&lt;/code>&lt;/td>
 &lt;td style="text-align: left">No&lt;/td>
 &lt;td style="text-align: left">Username for authentication&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>--milvus.password&lt;/code>&lt;/td>
 &lt;td style="text-align: left">No&lt;/td>
 &lt;td style="text-align: left">Password for authentication&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>--milvus.db-name&lt;/code>&lt;/td>
 &lt;td style="text-align: left">No&lt;/td>
 &lt;td style="text-align: left">Database name&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>--milvus.partitions&lt;/code>&lt;/td>
 &lt;td style="text-align: left">No&lt;/td>
 &lt;td style="text-align: left">Comma-separated partition names&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>--milvus.server-version&lt;/code>&lt;/td>
 &lt;td style="text-align: left">No&lt;/td>
 &lt;td style="text-align: left">Override detected server version&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>--milvus.enable-tls-auth&lt;/code>&lt;/td>
 &lt;td style="text-align: left">No&lt;/td>
 &lt;td style="text-align: left">Enable TLS authentication&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h3 id="qdrant-side-options">Qdrant-Side Options&lt;/h3>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th style="text-align: left">Flag&lt;/th>
 &lt;th style="text-align: left">Default&lt;/th>
 &lt;th style="text-align: left">Description&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>--qdrant.distance-metric&lt;/code>&lt;/td>
 &lt;td style="text-align: left">—&lt;/td>
 &lt;td style="text-align: left">Distance metric per vector field (map format, e.g., &lt;code>field1:cosine,field2:dot&lt;/code>)&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h2 id="gotchas">Gotchas&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>Partition handling:&lt;/strong> 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.&lt;/li>
&lt;li>&lt;strong>Schema strictness:&lt;/strong> Milvus enforces schema on write; Qdrant is schema-flexible. Verify that the schema-less flexibility didn&amp;rsquo;t cause payload fields to drift during migration.&lt;/li>
&lt;li>&lt;strong>Dynamic fields:&lt;/strong> Milvus dynamic fields (introduced in 2.3) may serialize differently. Check that JSON-typed dynamic fields survived the migration with correct structure.&lt;/li>
&lt;/ul>
&lt;h2 id="next-steps">Next Steps&lt;/h2>
&lt;p>After migration, verify your data arrived correctly with the &lt;a href="https://deploy-preview-2256--condescending-goldwasser-91acf0.netlify.app/documentation/migration-guidance/">Migration Verification Guide&lt;/a>.&lt;/p></description></item><item><title>From Elasticsearch</title><link>https://deploy-preview-2256--condescending-goldwasser-91acf0.netlify.app/documentation/migrate-to-qdrant/from-elasticsearch/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>info@qdrant.tech (Andrey Vasnetsov)</author><guid>https://deploy-preview-2256--condescending-goldwasser-91acf0.netlify.app/documentation/migrate-to-qdrant/from-elasticsearch/</guid><description>&lt;h1 id="migrate-from-elasticsearch-to-qdrant">Migrate from Elasticsearch to Qdrant&lt;/h1>
&lt;h2 id="what-you-need-from-elasticsearch">What You Need from Elasticsearch&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>Elasticsearch URL&lt;/strong> — the HTTP endpoint&lt;/li>
&lt;li>&lt;strong>Index name&lt;/strong> — the index containing your vectors&lt;/li>
&lt;li>&lt;strong>Credentials&lt;/strong> — username/password or API key&lt;/li>
&lt;/ul>
&lt;h2 id="concept-mapping">Concept Mapping&lt;/h2>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th style="text-align: left">Elasticsearch&lt;/th>
 &lt;th style="text-align: left">Qdrant&lt;/th>
 &lt;th style="text-align: left">Notes&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td style="text-align: left">Index&lt;/td>
 &lt;td style="text-align: left">Collection&lt;/td>
 &lt;td style="text-align: left">One-to-one mapping&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">Document&lt;/td>
 &lt;td style="text-align: left">Point&lt;/td>
 &lt;td style="text-align: left">Each document becomes a point&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>dense_vector&lt;/code> field&lt;/td>
 &lt;td style="text-align: left">Vector&lt;/td>
 &lt;td style="text-align: left">Mapped automatically&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">Document fields&lt;/td>
 &lt;td style="text-align: left">Payload&lt;/td>
 &lt;td style="text-align: left">Non-vector fields become payload&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>cosine&lt;/code>&lt;/td>
 &lt;td style="text-align: left">&lt;code>Cosine&lt;/code>&lt;/td>
 &lt;td style="text-align: left">ES returns &lt;code>1 - cosine_distance&lt;/code>; Qdrant returns cosine similarity directly&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>l2_norm&lt;/code>&lt;/td>
 &lt;td style="text-align: left">&lt;code>Euclid&lt;/code>&lt;/td>
 &lt;td style="text-align: left">Direct mapping&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>dot_product&lt;/code>&lt;/td>
 &lt;td style="text-align: left">&lt;code>Dot&lt;/code>&lt;/td>
 &lt;td style="text-align: left">Direct mapping&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h2 id="run-the-migration">Run the Migration&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">docker run --net&lt;span class="o">=&lt;/span>host --rm -it registry.cloud.qdrant.io/library/qdrant-migration elasticsearch &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --elasticsearch.url &lt;span class="s1">&amp;#39;https://your-es-host:9200&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --elasticsearch.index &lt;span class="s1">&amp;#39;your-index&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --elasticsearch.username &lt;span class="s1">&amp;#39;elastic&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --elasticsearch.password &lt;span class="s1">&amp;#39;your-password&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --qdrant.url &lt;span class="s1">&amp;#39;https://your-instance.cloud.qdrant.io:6334&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --qdrant.api-key &lt;span class="s1">&amp;#39;your-qdrant-api-key&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --qdrant.collection &lt;span class="s1">&amp;#39;your-collection&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="using-api-key-authentication">Using API Key Authentication&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">docker run --net&lt;span class="o">=&lt;/span>host --rm -it registry.cloud.qdrant.io/library/qdrant-migration elasticsearch &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --elasticsearch.url &lt;span class="s1">&amp;#39;https://your-es-host:9200&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --elasticsearch.index &lt;span class="s1">&amp;#39;your-index&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --elasticsearch.api-key &lt;span class="s1">&amp;#39;your-es-api-key&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --qdrant.url &lt;span class="s1">&amp;#39;https://your-instance.cloud.qdrant.io:6334&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --qdrant.api-key &lt;span class="s1">&amp;#39;your-qdrant-api-key&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --qdrant.collection &lt;span class="s1">&amp;#39;your-collection&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="all-elasticsearch-specific-flags">All Elasticsearch-Specific Flags&lt;/h3>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th style="text-align: left">Flag&lt;/th>
 &lt;th style="text-align: left">Required&lt;/th>
 &lt;th style="text-align: left">Description&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>--elasticsearch.url&lt;/code>&lt;/td>
 &lt;td style="text-align: left">Yes&lt;/td>
 &lt;td style="text-align: left">Elasticsearch HTTP endpoint&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>--elasticsearch.index&lt;/code>&lt;/td>
 &lt;td style="text-align: left">Yes&lt;/td>
 &lt;td style="text-align: left">Index to migrate&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>--elasticsearch.username&lt;/code>&lt;/td>
 &lt;td style="text-align: left">No&lt;/td>
 &lt;td style="text-align: left">Username for basic auth&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>--elasticsearch.password&lt;/code>&lt;/td>
 &lt;td style="text-align: left">No&lt;/td>
 &lt;td style="text-align: left">Password for basic auth&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>--elasticsearch.api-key&lt;/code>&lt;/td>
 &lt;td style="text-align: left">No&lt;/td>
 &lt;td style="text-align: left">API key for authentication&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>--elasticsearch.insecure-skip-verify&lt;/code>&lt;/td>
 &lt;td style="text-align: left">No&lt;/td>
 &lt;td style="text-align: left">Skip TLS certificate verification&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h3 id="qdrant-side-options">Qdrant-Side Options&lt;/h3>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th style="text-align: left">Flag&lt;/th>
 &lt;th style="text-align: left">Default&lt;/th>
 &lt;th style="text-align: left">Description&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>--qdrant.id-field&lt;/code>&lt;/td>
 &lt;td style="text-align: left">&lt;code>__id__&lt;/code>&lt;/td>
 &lt;td style="text-align: left">Payload field name for original Elasticsearch document IDs&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h2 id="hybrid-search-considerations">Hybrid Search Considerations&lt;/h2>
&lt;p>If your Elasticsearch setup uses hybrid BM25 + kNN scoring, you&amp;rsquo;ll need to reconstruct this in Qdrant using &lt;a href="https://deploy-preview-2256--condescending-goldwasser-91acf0.netlify.app/documentation/manage-data/vectors/#sparse-vectors">sparse vectors&lt;/a> (for BM25-like behavior) alongside dense vectors. The migration tool transfers the dense vectors; you&amp;rsquo;ll need to generate sparse vectors separately if you want hybrid search in Qdrant.&lt;/p></description></item><item><title>From OpenSearch</title><link>https://deploy-preview-2256--condescending-goldwasser-91acf0.netlify.app/documentation/migrate-to-qdrant/from-opensearch/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>info@qdrant.tech (Andrey Vasnetsov)</author><guid>https://deploy-preview-2256--condescending-goldwasser-91acf0.netlify.app/documentation/migrate-to-qdrant/from-opensearch/</guid><description>&lt;h1 id="migrate-from-opensearch-to-qdrant">Migrate from OpenSearch to Qdrant&lt;/h1>
&lt;h2 id="what-you-need-from-opensearch">What You Need from OpenSearch&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>OpenSearch URL&lt;/strong> — the HTTP endpoint&lt;/li>
&lt;li>&lt;strong>Index name&lt;/strong> — the index containing your vectors&lt;/li>
&lt;li>&lt;strong>Credentials&lt;/strong> — username/password or API key&lt;/li>
&lt;/ul>
&lt;h2 id="concept-mapping">Concept Mapping&lt;/h2>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th style="text-align: left">OpenSearch&lt;/th>
 &lt;th style="text-align: left">Qdrant&lt;/th>
 &lt;th style="text-align: left">Notes&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td style="text-align: left">Index&lt;/td>
 &lt;td style="text-align: left">Collection&lt;/td>
 &lt;td style="text-align: left">One-to-one mapping&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">Document&lt;/td>
 &lt;td style="text-align: left">Point&lt;/td>
 &lt;td style="text-align: left">Each document becomes a point&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>knn_vector&lt;/code> field&lt;/td>
 &lt;td style="text-align: left">Vector&lt;/td>
 &lt;td style="text-align: left">Mapped automatically&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">Document fields&lt;/td>
 &lt;td style="text-align: left">Payload&lt;/td>
 &lt;td style="text-align: left">Non-vector fields become payload&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>cosinesimil&lt;/code>&lt;/td>
 &lt;td style="text-align: left">&lt;code>Cosine&lt;/code>&lt;/td>
 &lt;td style="text-align: left">Direct mapping&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>l2&lt;/code>&lt;/td>
 &lt;td style="text-align: left">&lt;code>Euclid&lt;/code>&lt;/td>
 &lt;td style="text-align: left">Direct mapping&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>innerproduct&lt;/code>&lt;/td>
 &lt;td style="text-align: left">&lt;code>Dot&lt;/code>&lt;/td>
 &lt;td style="text-align: left">Direct mapping&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h2 id="run-the-migration">Run the Migration&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">docker run --net&lt;span class="o">=&lt;/span>host --rm -it registry.cloud.qdrant.io/library/qdrant-migration opensearch &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --opensearch.url &lt;span class="s1">&amp;#39;https://your-opensearch-host:9200&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --opensearch.index &lt;span class="s1">&amp;#39;your-index&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --opensearch.username &lt;span class="s1">&amp;#39;admin&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --opensearch.password &lt;span class="s1">&amp;#39;your-password&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --qdrant.url &lt;span class="s1">&amp;#39;https://your-instance.cloud.qdrant.io:6334&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --qdrant.api-key &lt;span class="s1">&amp;#39;your-qdrant-api-key&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --qdrant.collection &lt;span class="s1">&amp;#39;your-collection&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="using-api-key-authentication">Using API Key Authentication&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">docker run --net&lt;span class="o">=&lt;/span>host --rm -it registry.cloud.qdrant.io/library/qdrant-migration opensearch &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --opensearch.url &lt;span class="s1">&amp;#39;https://your-opensearch-host:9200&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --opensearch.index &lt;span class="s1">&amp;#39;your-index&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --opensearch.api-key &lt;span class="s1">&amp;#39;your-opensearch-api-key&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --qdrant.url &lt;span class="s1">&amp;#39;https://your-instance.cloud.qdrant.io:6334&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --qdrant.api-key &lt;span class="s1">&amp;#39;your-qdrant-api-key&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --qdrant.collection &lt;span class="s1">&amp;#39;your-collection&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="all-opensearch-specific-flags">All OpenSearch-Specific Flags&lt;/h3>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th style="text-align: left">Flag&lt;/th>
 &lt;th style="text-align: left">Required&lt;/th>
 &lt;th style="text-align: left">Description&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>--opensearch.url&lt;/code>&lt;/td>
 &lt;td style="text-align: left">Yes&lt;/td>
 &lt;td style="text-align: left">OpenSearch HTTP endpoint&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>--opensearch.index&lt;/code>&lt;/td>
 &lt;td style="text-align: left">Yes&lt;/td>
 &lt;td style="text-align: left">Index to migrate&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>--opensearch.username&lt;/code>&lt;/td>
 &lt;td style="text-align: left">No&lt;/td>
 &lt;td style="text-align: left">Username for basic auth&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>--opensearch.password&lt;/code>&lt;/td>
 &lt;td style="text-align: left">No&lt;/td>
 &lt;td style="text-align: left">Password for basic auth&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>--opensearch.api-key&lt;/code>&lt;/td>
 &lt;td style="text-align: left">No&lt;/td>
 &lt;td style="text-align: left">API key for authentication&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>--opensearch.insecure-skip-verify&lt;/code>&lt;/td>
 &lt;td style="text-align: left">No&lt;/td>
 &lt;td style="text-align: left">Skip TLS certificate verification&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h3 id="qdrant-side-options">Qdrant-Side Options&lt;/h3>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th style="text-align: left">Flag&lt;/th>
 &lt;th style="text-align: left">Default&lt;/th>
 &lt;th style="text-align: left">Description&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>--qdrant.id-field&lt;/code>&lt;/td>
 &lt;td style="text-align: left">&lt;code>__id__&lt;/code>&lt;/td>
 &lt;td style="text-align: left">Payload field name for original OpenSearch document IDs&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h2 id="gotchas">Gotchas&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>OpenSearch vs. Elasticsearch:&lt;/strong> OpenSearch is a fork of Elasticsearch, so many of the same considerations apply. However, the CLI subcommand is &lt;code>opensearch&lt;/code>, not &lt;code>elasticsearch&lt;/code>.&lt;/li>
&lt;li>&lt;strong>Score normalization:&lt;/strong> OpenSearch &lt;code>_score&lt;/code> values are not directly comparable to Qdrant scores. Use rank-based metrics when &lt;a href="https://deploy-preview-2256--condescending-goldwasser-91acf0.netlify.app/documentation/migration-guidance/">verifying your migration&lt;/a>.&lt;/li>
&lt;li>&lt;strong>Nested documents:&lt;/strong> OpenSearch nested documents need to be flattened or restructured for Qdrant&amp;rsquo;s payload model.&lt;/li>
&lt;/ul>
&lt;h2 id="next-steps">Next Steps&lt;/h2>
&lt;p>After migration, verify your data arrived correctly with the &lt;a href="https://deploy-preview-2256--condescending-goldwasser-91acf0.netlify.app/documentation/migration-guidance/">Migration Verification Guide&lt;/a>.&lt;/p></description></item><item><title>From pgvector</title><link>https://deploy-preview-2256--condescending-goldwasser-91acf0.netlify.app/documentation/migrate-to-qdrant/from-pgvector/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>info@qdrant.tech (Andrey Vasnetsov)</author><guid>https://deploy-preview-2256--condescending-goldwasser-91acf0.netlify.app/documentation/migrate-to-qdrant/from-pgvector/</guid><description>&lt;h1 id="migrate-from-pgvector-to-qdrant">Migrate from pgvector to Qdrant&lt;/h1>
&lt;h2 id="what-you-need-from-postgres">What You Need from Postgres&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>Connection URL&lt;/strong> — a standard Postgres connection string&lt;/li>
&lt;li>&lt;strong>Table name&lt;/strong> — the table containing your vector data&lt;/li>
&lt;/ul>
&lt;h2 id="concept-mapping">Concept Mapping&lt;/h2>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th style="text-align: left">pgvector&lt;/th>
 &lt;th style="text-align: left">Qdrant&lt;/th>
 &lt;th style="text-align: left">Notes&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td style="text-align: left">Table&lt;/td>
 &lt;td style="text-align: left">Collection&lt;/td>
 &lt;td style="text-align: left">One-to-one mapping&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">Row&lt;/td>
 &lt;td style="text-align: left">Point&lt;/td>
 &lt;td style="text-align: left">Each row becomes a point&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>vector&lt;/code> column&lt;/td>
 &lt;td style="text-align: left">Vector&lt;/td>
 &lt;td style="text-align: left">Mapped automatically&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">Other columns&lt;/td>
 &lt;td style="text-align: left">Payload&lt;/td>
 &lt;td style="text-align: left">All non-vector columns become payload fields&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>vector_cosine_ops&lt;/code>&lt;/td>
 &lt;td style="text-align: left">&lt;code>Cosine&lt;/code>&lt;/td>
 &lt;td style="text-align: left">pgvector returns distance (1 - similarity); Qdrant returns similarity&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>vector_l2_ops&lt;/code>&lt;/td>
 &lt;td style="text-align: left">&lt;code>Euclid&lt;/code>&lt;/td>
 &lt;td style="text-align: left">Direct mapping&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>vector_ip_ops&lt;/code>&lt;/td>
 &lt;td style="text-align: left">&lt;code>Dot&lt;/code>&lt;/td>
 &lt;td style="text-align: left">pgvector uses negative inner product for ordering; scores will be inverted&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h2 id="run-the-migration">Run the Migration&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">docker run --net&lt;span class="o">=&lt;/span>host --rm -it registry.cloud.qdrant.io/library/qdrant-migration pg &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --pg.url &lt;span class="s1">&amp;#39;postgres://user:password@host:5432/dbname&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --pg.table &lt;span class="s1">&amp;#39;your_embeddings_table&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --pg.key-column &lt;span class="s1">&amp;#39;id&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --qdrant.url &lt;span class="s1">&amp;#39;https://your-instance.cloud.qdrant.io:6334&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --qdrant.api-key &lt;span class="s1">&amp;#39;your-qdrant-api-key&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --qdrant.collection &lt;span class="s1">&amp;#39;your-collection&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="selecting-specific-columns">Selecting Specific Columns&lt;/h3>
&lt;p>By default, all columns are migrated. Use &lt;code>--pg.columns&lt;/code> to select specific ones:&lt;/p></description></item><item><title>From S3 Vectors</title><link>https://deploy-preview-2256--condescending-goldwasser-91acf0.netlify.app/documentation/migrate-to-qdrant/from-s3-vectors/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>info@qdrant.tech (Andrey Vasnetsov)</author><guid>https://deploy-preview-2256--condescending-goldwasser-91acf0.netlify.app/documentation/migrate-to-qdrant/from-s3-vectors/</guid><description>&lt;h1 id="migrate-from-s3-vectors-to-qdrant">Migrate from S3 Vectors to Qdrant&lt;/h1>
&lt;h2 id="what-you-need-from-aws">What You Need from AWS&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>S3 bucket name&lt;/strong> — the bucket containing your vector data&lt;/li>
&lt;li>&lt;strong>Index name&lt;/strong> — the S3 Vectors index to migrate&lt;/li>
&lt;li>&lt;strong>AWS credentials&lt;/strong> — configured via &lt;code>aws configure&lt;/code> or environment variables (&lt;code>AWS_ACCESS_KEY_ID&lt;/code>, &lt;code>AWS_SECRET_ACCESS_KEY&lt;/code>)&lt;/li>
&lt;/ul>
&lt;aside role="status">Set your AWS credentials using the AWS CLI's &lt;code>configure&lt;/code> command or environment variables before running the migration container.&lt;/aside>
&lt;h2 id="run-the-migration">Run the Migration&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">docker run --net&lt;span class="o">=&lt;/span>host --rm -it &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> -e &lt;span class="nv">AWS_ACCESS_KEY_ID&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s1">&amp;#39;your-access-key&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> -e &lt;span class="nv">AWS_SECRET_ACCESS_KEY&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s1">&amp;#39;your-secret-key&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> -e &lt;span class="nv">AWS_REGION&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s1">&amp;#39;us-east-1&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> registry.cloud.qdrant.io/library/qdrant-migration s3 &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --s3.bucket &lt;span class="s1">&amp;#39;your-bucket-name&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --s3.index &lt;span class="s1">&amp;#39;your-index-name&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --qdrant.url &lt;span class="s1">&amp;#39;https://your-instance.cloud.qdrant.io:6334&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --qdrant.api-key &lt;span class="s1">&amp;#39;your-qdrant-api-key&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --qdrant.collection &lt;span class="s1">&amp;#39;your-collection&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="all-s3-vectors-specific-flags">All S3 Vectors-Specific Flags&lt;/h3>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th style="text-align: left">Flag&lt;/th>
 &lt;th style="text-align: left">Required&lt;/th>
 &lt;th style="text-align: left">Description&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>--s3.bucket&lt;/code>&lt;/td>
 &lt;td style="text-align: left">Yes&lt;/td>
 &lt;td style="text-align: left">S3 bucket name&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>--s3.index&lt;/code>&lt;/td>
 &lt;td style="text-align: left">Yes&lt;/td>
 &lt;td style="text-align: left">S3 Vectors index name&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;p>AWS credentials are passed via environment variables or the default AWS credential chain, not CLI flags.&lt;/p></description></item><item><title>From Chroma</title><link>https://deploy-preview-2256--condescending-goldwasser-91acf0.netlify.app/documentation/migrate-to-qdrant/from-chroma/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>info@qdrant.tech (Andrey Vasnetsov)</author><guid>https://deploy-preview-2256--condescending-goldwasser-91acf0.netlify.app/documentation/migrate-to-qdrant/from-chroma/</guid><description>&lt;h1 id="migrate-from-chroma-to-qdrant">Migrate from Chroma to Qdrant&lt;/h1>
&lt;h2 id="what-you-need-from-chroma">What You Need from Chroma&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>Chroma URL&lt;/strong> — the HTTP endpoint of your Chroma server&lt;/li>
&lt;li>&lt;strong>Collection name&lt;/strong> — the collection to migrate&lt;/li>
&lt;li>&lt;strong>Authentication&lt;/strong> — API token or basic auth credentials, if configured&lt;/li>
&lt;/ul>
&lt;h2 id="concept-mapping">Concept Mapping&lt;/h2>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th style="text-align: left">Chroma&lt;/th>
 &lt;th style="text-align: left">Qdrant&lt;/th>
 &lt;th style="text-align: left">Notes&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td style="text-align: left">Collection&lt;/td>
 &lt;td style="text-align: left">Collection&lt;/td>
 &lt;td style="text-align: left">One-to-one mapping&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">Document&lt;/td>
 &lt;td style="text-align: left">Point&lt;/td>
 &lt;td style="text-align: left">Each document becomes a point&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">Embeddings&lt;/td>
 &lt;td style="text-align: left">Vector&lt;/td>
 &lt;td style="text-align: left">Mapped automatically&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">Metadata&lt;/td>
 &lt;td style="text-align: left">Payload&lt;/td>
 &lt;td style="text-align: left">Direct mapping&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">Documents (text)&lt;/td>
 &lt;td style="text-align: left">Payload field&lt;/td>
 &lt;td style="text-align: left">Stored via &lt;code>--qdrant.document-field&lt;/code>&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h2 id="run-the-migration">Run the Migration&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">docker run --net&lt;span class="o">=&lt;/span>host --rm -it registry.cloud.qdrant.io/library/qdrant-migration chroma &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --chroma.url &lt;span class="s1">&amp;#39;http://localhost:8000&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --chroma.collection &lt;span class="s1">&amp;#39;your-collection&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --qdrant.url &lt;span class="s1">&amp;#39;https://your-instance.cloud.qdrant.io:6334&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --qdrant.api-key &lt;span class="s1">&amp;#39;your-qdrant-api-key&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --qdrant.collection &lt;span class="s1">&amp;#39;your-collection&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="with-authentication">With Authentication&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">docker run --net&lt;span class="o">=&lt;/span>host --rm -it registry.cloud.qdrant.io/library/qdrant-migration chroma &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --chroma.url &lt;span class="s1">&amp;#39;https://your-chroma-host:8000&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --chroma.collection &lt;span class="s1">&amp;#39;your-collection&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --chroma.auth-type token &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --chroma.token &lt;span class="s1">&amp;#39;your-chroma-token&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --qdrant.url &lt;span class="s1">&amp;#39;https://your-instance.cloud.qdrant.io:6334&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --qdrant.api-key &lt;span class="s1">&amp;#39;your-qdrant-api-key&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --qdrant.collection &lt;span class="s1">&amp;#39;your-collection&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="all-chroma-specific-flags">All Chroma-Specific Flags&lt;/h3>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th style="text-align: left">Flag&lt;/th>
 &lt;th style="text-align: left">Required&lt;/th>
 &lt;th style="text-align: left">Description&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>--chroma.url&lt;/code>&lt;/td>
 &lt;td style="text-align: left">No&lt;/td>
 &lt;td style="text-align: left">Chroma HTTP endpoint (default: &lt;code>http://localhost:8000&lt;/code>)&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>--chroma.collection&lt;/code>&lt;/td>
 &lt;td style="text-align: left">Yes&lt;/td>
 &lt;td style="text-align: left">Collection name to migrate&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>--chroma.tenant&lt;/code>&lt;/td>
 &lt;td style="text-align: left">No&lt;/td>
 &lt;td style="text-align: left">Chroma tenant&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>--chroma.database&lt;/code>&lt;/td>
 &lt;td style="text-align: left">No&lt;/td>
 &lt;td style="text-align: left">Chroma database&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>--chroma.auth-type&lt;/code>&lt;/td>
 &lt;td style="text-align: left">No&lt;/td>
 &lt;td style="text-align: left">&lt;code>none&lt;/code>, &lt;code>basic&lt;/code>, or &lt;code>token&lt;/code> (default: &lt;code>none&lt;/code>)&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>--chroma.username&lt;/code>&lt;/td>
 &lt;td style="text-align: left">No&lt;/td>
 &lt;td style="text-align: left">Username (when auth-type is &lt;code>basic&lt;/code>)&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>--chroma.password&lt;/code>&lt;/td>
 &lt;td style="text-align: left">No&lt;/td>
 &lt;td style="text-align: left">Password (when auth-type is &lt;code>basic&lt;/code>)&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>--chroma.token&lt;/code>&lt;/td>
 &lt;td style="text-align: left">No&lt;/td>
 &lt;td style="text-align: left">Token (when auth-type is &lt;code>token&lt;/code>)&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>--chroma.token-header&lt;/code>&lt;/td>
 &lt;td style="text-align: left">No&lt;/td>
 &lt;td style="text-align: left">Custom header name for token auth&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h3 id="qdrant-side-options">Qdrant-Side Options&lt;/h3>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th style="text-align: left">Flag&lt;/th>
 &lt;th style="text-align: left">Default&lt;/th>
 &lt;th style="text-align: left">Description&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>--qdrant.document-field&lt;/code>&lt;/td>
 &lt;td style="text-align: left">&lt;code>document&lt;/code>&lt;/td>
 &lt;td style="text-align: left">Payload field name to store Chroma document text&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>--qdrant.id-field&lt;/code>&lt;/td>
 &lt;td style="text-align: left">&lt;code>__id__&lt;/code>&lt;/td>
 &lt;td style="text-align: left">Payload field name for original Chroma IDs&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>--qdrant.distance-metric&lt;/code>&lt;/td>
 &lt;td style="text-align: left">&lt;code>euclid&lt;/code>&lt;/td>
 &lt;td style="text-align: left">&lt;code>cosine&lt;/code>, &lt;code>dot&lt;/code>, &lt;code>manhattan&lt;/code>, or &lt;code>euclid&lt;/code>&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h2 id="gotchas">Gotchas&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>Document text:&lt;/strong> Chroma stores raw document text alongside embeddings. Use &lt;code>--qdrant.document-field&lt;/code> to preserve this text as a payload field in Qdrant.&lt;/li>
&lt;li>&lt;strong>ID mapping:&lt;/strong> Chroma uses string IDs. The migration tool maps these to Qdrant point IDs and stores the original Chroma ID in a payload field (default: &lt;code>__id__&lt;/code>).&lt;/li>
&lt;li>&lt;strong>Distance metric:&lt;/strong> Chroma defaults to L2 distance. Verify which metric your collection uses and set &lt;code>--qdrant.distance-metric&lt;/code> accordingly.&lt;/li>
&lt;/ul>
&lt;h2 id="next-steps">Next Steps&lt;/h2>
&lt;p>After migration, verify your data arrived correctly with the &lt;a href="https://deploy-preview-2256--condescending-goldwasser-91acf0.netlify.app/documentation/migration-guidance/">Migration Verification Guide&lt;/a>.&lt;/p></description></item><item><title>From Redis</title><link>https://deploy-preview-2256--condescending-goldwasser-91acf0.netlify.app/documentation/migrate-to-qdrant/from-redis/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>info@qdrant.tech (Andrey Vasnetsov)</author><guid>https://deploy-preview-2256--condescending-goldwasser-91acf0.netlify.app/documentation/migrate-to-qdrant/from-redis/</guid><description>&lt;h1 id="migrate-from-redis-to-qdrant">Migrate from Redis to Qdrant&lt;/h1>
&lt;h2 id="what-you-need-from-redis">What You Need from Redis&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>Redis address&lt;/strong> — host and port of your Redis instance&lt;/li>
&lt;li>&lt;strong>FT index name&lt;/strong> — the RediSearch full-text index that contains your vectors&lt;/li>
&lt;li>&lt;strong>Authentication&lt;/strong> — username and password, if configured&lt;/li>
&lt;/ul>
&lt;aside role="alert">&lt;strong>Important:&lt;/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.&lt;/aside>
&lt;h2 id="concept-mapping">Concept Mapping&lt;/h2>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th style="text-align: left">Redis&lt;/th>
 &lt;th style="text-align: left">Qdrant&lt;/th>
 &lt;th style="text-align: left">Notes&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td style="text-align: left">FT Index&lt;/td>
 &lt;td style="text-align: left">Collection&lt;/td>
 &lt;td style="text-align: left">One-to-one mapping&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">Document&lt;/td>
 &lt;td style="text-align: left">Point&lt;/td>
 &lt;td style="text-align: left">Each document becomes a point&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">Vector field&lt;/td>
 &lt;td style="text-align: left">Vector&lt;/td>
 &lt;td style="text-align: left">Named vectors are preserved&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">Hash/JSON fields&lt;/td>
 &lt;td style="text-align: left">Payload&lt;/td>
 &lt;td style="text-align: left">Direct mapping&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">Document key&lt;/td>
 &lt;td style="text-align: left">Payload field&lt;/td>
 &lt;td style="text-align: left">Stored via &lt;code>--qdrant.id-field&lt;/code>&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h2 id="run-the-migration">Run the Migration&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">docker run --net&lt;span class="o">=&lt;/span>host --rm -it registry.cloud.qdrant.io/library/qdrant-migration redis &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --redis.index &lt;span class="s1">&amp;#39;your-ft-index&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --redis.addr &lt;span class="s1">&amp;#39;localhost:6379&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --qdrant.url &lt;span class="s1">&amp;#39;https://your-instance.cloud.qdrant.io:6334&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --qdrant.api-key &lt;span class="s1">&amp;#39;your-qdrant-api-key&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --qdrant.collection &lt;span class="s1">&amp;#39;your-collection&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="with-authentication">With Authentication&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">docker run --net&lt;span class="o">=&lt;/span>host --rm -it registry.cloud.qdrant.io/library/qdrant-migration redis &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --redis.index &lt;span class="s1">&amp;#39;your-ft-index&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --redis.addr &lt;span class="s1">&amp;#39;your-redis-host:6379&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --redis.username &lt;span class="s1">&amp;#39;your-username&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --redis.password &lt;span class="s1">&amp;#39;your-password&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --qdrant.url &lt;span class="s1">&amp;#39;https://your-instance.cloud.qdrant.io:6334&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --qdrant.api-key &lt;span class="s1">&amp;#39;your-qdrant-api-key&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --qdrant.collection &lt;span class="s1">&amp;#39;your-collection&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --migration.create-collection &lt;span class="nb">false&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="all-redis-specific-flags">All Redis-Specific Flags&lt;/h3>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th style="text-align: left">Flag&lt;/th>
 &lt;th style="text-align: left">Required&lt;/th>
 &lt;th style="text-align: left">Description&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>--redis.index&lt;/code>&lt;/td>
 &lt;td style="text-align: left">Yes&lt;/td>
 &lt;td style="text-align: left">RediSearch FT index name&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>--redis.addr&lt;/code>&lt;/td>
 &lt;td style="text-align: left">No&lt;/td>
 &lt;td style="text-align: left">Redis address (default: &lt;code>localhost:6379&lt;/code>)&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>--redis.protocol&lt;/code>&lt;/td>
 &lt;td style="text-align: left">No&lt;/td>
 &lt;td style="text-align: left">Redis protocol version (default: &lt;code>2&lt;/code>)&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>--redis.username&lt;/code>&lt;/td>
 &lt;td style="text-align: left">No&lt;/td>
 &lt;td style="text-align: left">Username for authentication&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>--redis.password&lt;/code>&lt;/td>
 &lt;td style="text-align: left">No&lt;/td>
 &lt;td style="text-align: left">Password for authentication&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>--redis.client-name&lt;/code>&lt;/td>
 &lt;td style="text-align: left">No&lt;/td>
 &lt;td style="text-align: left">Client name&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>--redis.db&lt;/code>&lt;/td>
 &lt;td style="text-align: left">No&lt;/td>
 &lt;td style="text-align: left">Database number&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>--redis.network&lt;/code>&lt;/td>
 &lt;td style="text-align: left">No&lt;/td>
 &lt;td style="text-align: left">Network type: &lt;code>tcp&lt;/code> or &lt;code>unix&lt;/code> (default: &lt;code>tcp&lt;/code>)&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h3 id="qdrant-side-options">Qdrant-Side Options&lt;/h3>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th style="text-align: left">Flag&lt;/th>
 &lt;th style="text-align: left">Default&lt;/th>
 &lt;th style="text-align: left">Description&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>--qdrant.id-field&lt;/code>&lt;/td>
 &lt;td style="text-align: left">&lt;code>__id__&lt;/code>&lt;/td>
 &lt;td style="text-align: left">Payload field name for original Redis document keys&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h2 id="gotchas">Gotchas&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>Named vectors:&lt;/strong> 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.&lt;/li>
&lt;li>&lt;strong>ID mapping:&lt;/strong> Redis document keys are converted to Qdrant point IDs. The original key is stored in the payload under &lt;code>--qdrant.id-field&lt;/code>.&lt;/li>
&lt;/ul>
&lt;h2 id="next-steps">Next Steps&lt;/h2>
&lt;p>After migration, verify your data arrived correctly with the &lt;a href="https://deploy-preview-2256--condescending-goldwasser-91acf0.netlify.app/documentation/migration-guidance/">Migration Verification Guide&lt;/a>.&lt;/p></description></item><item><title>From MongoDB</title><link>https://deploy-preview-2256--condescending-goldwasser-91acf0.netlify.app/documentation/migrate-to-qdrant/from-mongodb/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>info@qdrant.tech (Andrey Vasnetsov)</author><guid>https://deploy-preview-2256--condescending-goldwasser-91acf0.netlify.app/documentation/migrate-to-qdrant/from-mongodb/</guid><description>&lt;h1 id="migrate-from-mongodb-to-qdrant">Migrate from MongoDB to Qdrant&lt;/h1>
&lt;h2 id="what-you-need-from-mongodb">What You Need from MongoDB&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>Connection string&lt;/strong> — MongoDB URI (e.g., &lt;code>mongodb://user:pass@host:27017&lt;/code>)&lt;/li>
&lt;li>&lt;strong>Database name&lt;/strong> — the database containing your collection&lt;/li>
&lt;li>&lt;strong>Collection name&lt;/strong> — the collection to migrate&lt;/li>
&lt;li>&lt;strong>Vector field names&lt;/strong> — the names of fields that store vector embeddings&lt;/li>
&lt;/ul>
&lt;aside role="alert">&lt;strong>Important:&lt;/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.&lt;/aside>
&lt;h2 id="concept-mapping">Concept Mapping&lt;/h2>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th style="text-align: left">MongoDB&lt;/th>
 &lt;th style="text-align: left">Qdrant&lt;/th>
 &lt;th style="text-align: left">Notes&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td style="text-align: left">Collection&lt;/td>
 &lt;td style="text-align: left">Collection&lt;/td>
 &lt;td style="text-align: left">One-to-one mapping&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">Document&lt;/td>
 &lt;td style="text-align: left">Point&lt;/td>
 &lt;td style="text-align: left">Each document becomes a point&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">Vector field&lt;/td>
 &lt;td style="text-align: left">Vector&lt;/td>
 &lt;td style="text-align: left">Named vectors are preserved&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">Non-vector fields&lt;/td>
 &lt;td style="text-align: left">Payload&lt;/td>
 &lt;td style="text-align: left">Direct mapping&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>_id&lt;/code> (ObjectID or string)&lt;/td>
 &lt;td style="text-align: left">Point ID + Payload&lt;/td>
 &lt;td style="text-align: left">Converted to UUID; original stored in payload&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h2 id="run-the-migration">Run the Migration&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">docker run --net&lt;span class="o">=&lt;/span>host --rm -it registry.cloud.qdrant.io/library/qdrant-migration mongodb &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --mongodb.url &lt;span class="s1">&amp;#39;mongodb://localhost:27017&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --mongodb.database &lt;span class="s1">&amp;#39;your-database&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --mongodb.collection &lt;span class="s1">&amp;#39;your-collection&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --mongodb.vector-fields &lt;span class="s1">&amp;#39;embedding&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --qdrant.url &lt;span class="s1">&amp;#39;https://your-instance.cloud.qdrant.io:6334&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --qdrant.api-key &lt;span class="s1">&amp;#39;your-qdrant-api-key&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --qdrant.collection &lt;span class="s1">&amp;#39;your-collection&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="with-multiple-vector-fields">With Multiple Vector Fields&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">docker run --net&lt;span class="o">=&lt;/span>host --rm -it registry.cloud.qdrant.io/library/qdrant-migration mongodb &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --mongodb.url &lt;span class="s1">&amp;#39;mongodb+srv://user:pass@cluster.mongodb.net&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --mongodb.database &lt;span class="s1">&amp;#39;your-database&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --mongodb.collection &lt;span class="s1">&amp;#39;your-collection&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --mongodb.vector-fields &lt;span class="s1">&amp;#39;title_embedding,body_embedding&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --qdrant.url &lt;span class="s1">&amp;#39;https://your-instance.cloud.qdrant.io:6334&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --qdrant.api-key &lt;span class="s1">&amp;#39;your-qdrant-api-key&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --qdrant.collection &lt;span class="s1">&amp;#39;your-collection&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --migration.create-collection &lt;span class="nb">false&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="all-mongodb-specific-flags">All MongoDB-Specific Flags&lt;/h3>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th style="text-align: left">Flag&lt;/th>
 &lt;th style="text-align: left">Required&lt;/th>
 &lt;th style="text-align: left">Description&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>--mongodb.url&lt;/code>&lt;/td>
 &lt;td style="text-align: left">Yes&lt;/td>
 &lt;td style="text-align: left">MongoDB connection string&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>--mongodb.database&lt;/code>&lt;/td>
 &lt;td style="text-align: left">Yes&lt;/td>
 &lt;td style="text-align: left">Database name&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>--mongodb.collection&lt;/code>&lt;/td>
 &lt;td style="text-align: left">Yes&lt;/td>
 &lt;td style="text-align: left">Collection name&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>--mongodb.vector-fields&lt;/code>&lt;/td>
 &lt;td style="text-align: left">Yes&lt;/td>
 &lt;td style="text-align: left">Comma-separated list of vector field names&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h3 id="qdrant-side-options">Qdrant-Side Options&lt;/h3>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th style="text-align: left">Flag&lt;/th>
 &lt;th style="text-align: left">Default&lt;/th>
 &lt;th style="text-align: left">Description&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>--qdrant.id-field&lt;/code>&lt;/td>
 &lt;td style="text-align: left">&lt;code>__id__&lt;/code>&lt;/td>
 &lt;td style="text-align: left">Payload field name for original MongoDB &lt;code>_id&lt;/code> values&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h2 id="gotchas">Gotchas&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>Vector field names are required:&lt;/strong> MongoDB has no schema-level marker for vector fields. You must explicitly list them via &lt;code>--mongodb.vector-fields&lt;/code>.&lt;/li>
&lt;li>&lt;strong>ID mapping:&lt;/strong> MongoDB &lt;code>_id&lt;/code> values (ObjectID or string) are converted to Qdrant UUIDs. The original value is stored in payload under &lt;code>--qdrant.id-field&lt;/code>.&lt;/li>
&lt;/ul>
&lt;h2 id="next-steps">Next Steps&lt;/h2>
&lt;p>After migration, verify your data arrived correctly with the &lt;a href="https://deploy-preview-2256--condescending-goldwasser-91acf0.netlify.app/documentation/migration-guidance/">Migration Verification Guide&lt;/a>.&lt;/p></description></item><item><title>From FAISS</title><link>https://deploy-preview-2256--condescending-goldwasser-91acf0.netlify.app/documentation/migrate-to-qdrant/from-faiss/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>info@qdrant.tech (Andrey Vasnetsov)</author><guid>https://deploy-preview-2256--condescending-goldwasser-91acf0.netlify.app/documentation/migrate-to-qdrant/from-faiss/</guid><description>&lt;h1 id="migrate-from-faiss-to-qdrant">Migrate from FAISS to Qdrant&lt;/h1>
&lt;h2 id="what-you-need-from-faiss">What You Need from FAISS&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>Index file path&lt;/strong> — path to your FAISS index file&lt;/li>
&lt;li>&lt;strong>Distance metric&lt;/strong> — the metric used when the index was built (&lt;code>l2&lt;/code>, &lt;code>inner product&lt;/code>, etc.)&lt;/li>
&lt;/ul>
&lt;aside role="alert">&lt;strong>Important:&lt;/strong> Only non-quantized FAISS index types are supported. Quantized indexes (e.g., &lt;code>IndexIVFPQ&lt;/code>) do not store the original vectors and cannot be migrated.&lt;/aside>
&lt;h2 id="supported-index-types">Supported Index Types&lt;/h2>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th style="text-align: left">FAISS Index Type&lt;/th>
 &lt;th style="text-align: left">Supported&lt;/th>
 &lt;th style="text-align: left">Notes&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>IndexFlatL2&lt;/code>&lt;/td>
 &lt;td style="text-align: left">Yes&lt;/td>
 &lt;td style="text-align: left">Maps to &lt;code>euclid&lt;/code> distance&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>IndexFlatIP&lt;/code>&lt;/td>
 &lt;td style="text-align: left">Yes&lt;/td>
 &lt;td style="text-align: left">Maps to &lt;code>dot&lt;/code> distance&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>IndexHNSWFlat&lt;/code>&lt;/td>
 &lt;td style="text-align: left">Yes&lt;/td>
 &lt;td style="text-align: left">Full vectors are stored&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>IndexIVFFlat&lt;/code>&lt;/td>
 &lt;td style="text-align: left">Yes&lt;/td>
 &lt;td style="text-align: left">Full vectors are stored&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>IndexIVFPQ&lt;/code>&lt;/td>
 &lt;td style="text-align: left">No&lt;/td>
 &lt;td style="text-align: left">Quantized — original vectors not stored&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>IndexPQ&lt;/code>&lt;/td>
 &lt;td style="text-align: left">No&lt;/td>
 &lt;td style="text-align: left">Quantized — original vectors not stored&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h2 id="concept-mapping">Concept Mapping&lt;/h2>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th style="text-align: left">FAISS&lt;/th>
 &lt;th style="text-align: left">Qdrant&lt;/th>
 &lt;th style="text-align: left">Notes&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td style="text-align: left">Index&lt;/td>
 &lt;td style="text-align: left">Collection&lt;/td>
 &lt;td style="text-align: left">One-to-one mapping&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">Vector (by position)&lt;/td>
 &lt;td style="text-align: left">Point&lt;/td>
 &lt;td style="text-align: left">Position in index becomes point ID&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h2 id="run-the-migration">Run the Migration&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">docker run --net&lt;span class="o">=&lt;/span>host --rm -it &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> -v /path/to/your/index:/data &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> registry.cloud.qdrant.io/library/qdrant-migration faiss &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --faiss.index-path &lt;span class="s1">&amp;#39;/data/your-index.index&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --qdrant.url &lt;span class="s1">&amp;#39;https://your-instance.cloud.qdrant.io:6334&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --qdrant.api-key &lt;span class="s1">&amp;#39;your-qdrant-api-key&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --qdrant.collection &lt;span class="s1">&amp;#39;your-collection&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --qdrant.distance-metric cosine
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="all-faiss-specific-flags">All FAISS-Specific Flags&lt;/h3>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th style="text-align: left">Flag&lt;/th>
 &lt;th style="text-align: left">Required&lt;/th>
 &lt;th style="text-align: left">Description&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>--faiss.index-path&lt;/code>&lt;/td>
 &lt;td style="text-align: left">Yes&lt;/td>
 &lt;td style="text-align: left">Path to the FAISS index file (inside the container)&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h3 id="qdrant-side-options">Qdrant-Side Options&lt;/h3>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th style="text-align: left">Flag&lt;/th>
 &lt;th style="text-align: left">Default&lt;/th>
 &lt;th style="text-align: left">Description&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>--qdrant.distance-metric&lt;/code>&lt;/td>
 &lt;td style="text-align: left">&lt;code>cosine&lt;/code>&lt;/td>
 &lt;td style="text-align: left">Distance metric: &lt;code>cosine&lt;/code>, &lt;code>dot&lt;/code>, &lt;code>euclid&lt;/code>, or &lt;code>manhattan&lt;/code>&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h2 id="gotchas">Gotchas&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>No metadata:&lt;/strong> 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.&lt;/li>
&lt;li>&lt;strong>Point IDs:&lt;/strong> Points are assigned IDs based on their position in the FAISS index. Use this to join with any external metadata store.&lt;/li>
&lt;/ul>
&lt;h2 id="next-steps">Next Steps&lt;/h2>
&lt;p>After migration, verify your data arrived correctly with the &lt;a href="https://deploy-preview-2256--condescending-goldwasser-91acf0.netlify.app/documentation/migration-guidance/">Migration Verification Guide&lt;/a>.&lt;/p></description></item><item><title>From Apache Solr</title><link>https://deploy-preview-2256--condescending-goldwasser-91acf0.netlify.app/documentation/migrate-to-qdrant/from-solr/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>info@qdrant.tech (Andrey Vasnetsov)</author><guid>https://deploy-preview-2256--condescending-goldwasser-91acf0.netlify.app/documentation/migrate-to-qdrant/from-solr/</guid><description>&lt;h1 id="migrate-from-apache-solr-to-qdrant">Migrate from Apache Solr to Qdrant&lt;/h1>
&lt;h2 id="what-you-need-from-solr">What You Need from Solr&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>Solr URL&lt;/strong> — the base URL of your Solr instance (e.g., &lt;code>http://localhost:8983&lt;/code>)&lt;/li>
&lt;li>&lt;strong>Collection name&lt;/strong> — the Solr collection to migrate&lt;/li>
&lt;li>&lt;strong>Authentication&lt;/strong> — username and password, if configured&lt;/li>
&lt;/ul>
&lt;aside role="alert">&lt;strong>Important:&lt;/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.&lt;/aside>
&lt;h2 id="concept-mapping">Concept Mapping&lt;/h2>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th style="text-align: left">Solr&lt;/th>
 &lt;th style="text-align: left">Qdrant&lt;/th>
 &lt;th style="text-align: left">Notes&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td style="text-align: left">Collection&lt;/td>
 &lt;td style="text-align: left">Collection&lt;/td>
 &lt;td style="text-align: left">One-to-one mapping&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">Document&lt;/td>
 &lt;td style="text-align: left">Point&lt;/td>
 &lt;td style="text-align: left">Each document becomes a point&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">Dense vector field&lt;/td>
 &lt;td style="text-align: left">Vector&lt;/td>
 &lt;td style="text-align: left">Named vectors are preserved&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">Non-vector fields&lt;/td>
 &lt;td style="text-align: left">Payload&lt;/td>
 &lt;td style="text-align: left">Direct mapping&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">Document ID (&lt;code>id&lt;/code> field)&lt;/td>
 &lt;td style="text-align: left">Payload field&lt;/td>
 &lt;td style="text-align: left">Stored via &lt;code>--qdrant.id-field&lt;/code>&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h2 id="run-the-migration">Run the Migration&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">docker run --net&lt;span class="o">=&lt;/span>host --rm -it registry.cloud.qdrant.io/library/qdrant-migration solr &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --solr.url &lt;span class="s1">&amp;#39;http://localhost:8983&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --solr.collection &lt;span class="s1">&amp;#39;your-collection&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --qdrant.url &lt;span class="s1">&amp;#39;https://your-instance.cloud.qdrant.io:6334&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --qdrant.api-key &lt;span class="s1">&amp;#39;your-qdrant-api-key&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --qdrant.collection &lt;span class="s1">&amp;#39;your-collection&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="with-authentication">With Authentication&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">docker run --net&lt;span class="o">=&lt;/span>host --rm -it registry.cloud.qdrant.io/library/qdrant-migration solr &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --solr.url &lt;span class="s1">&amp;#39;https://your-solr-host:8983&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --solr.collection &lt;span class="s1">&amp;#39;your-collection&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --solr.username &lt;span class="s1">&amp;#39;your-username&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --solr.password &lt;span class="s1">&amp;#39;your-password&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --qdrant.url &lt;span class="s1">&amp;#39;https://your-instance.cloud.qdrant.io:6334&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --qdrant.api-key &lt;span class="s1">&amp;#39;your-qdrant-api-key&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --qdrant.collection &lt;span class="s1">&amp;#39;your-collection&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --migration.create-collection &lt;span class="nb">false&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="all-solr-specific-flags">All Solr-Specific Flags&lt;/h3>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th style="text-align: left">Flag&lt;/th>
 &lt;th style="text-align: left">Required&lt;/th>
 &lt;th style="text-align: left">Description&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>--solr.url&lt;/code>&lt;/td>
 &lt;td style="text-align: left">Yes&lt;/td>
 &lt;td style="text-align: left">Solr base URL (e.g., &lt;code>http://localhost:8983&lt;/code>)&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>--solr.collection&lt;/code>&lt;/td>
 &lt;td style="text-align: left">Yes&lt;/td>
 &lt;td style="text-align: left">Solr collection name&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>--solr.username&lt;/code>&lt;/td>
 &lt;td style="text-align: left">No&lt;/td>
 &lt;td style="text-align: left">Username for basic authentication&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>--solr.password&lt;/code>&lt;/td>
 &lt;td style="text-align: left">No&lt;/td>
 &lt;td style="text-align: left">Password for basic authentication&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>--solr.insecure-skip-verify&lt;/code>&lt;/td>
 &lt;td style="text-align: left">No&lt;/td>
 &lt;td style="text-align: left">Skip TLS certificate verification (default: &lt;code>false&lt;/code>)&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h3 id="qdrant-side-options">Qdrant-Side Options&lt;/h3>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th style="text-align: left">Flag&lt;/th>
 &lt;th style="text-align: left">Default&lt;/th>
 &lt;th style="text-align: left">Description&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>--qdrant.id-field&lt;/code>&lt;/td>
 &lt;td style="text-align: left">&lt;code>__id__&lt;/code>&lt;/td>
 &lt;td style="text-align: left">Payload field name for original Solr document IDs&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h2 id="gotchas">Gotchas&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>Named vectors:&lt;/strong> 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.&lt;/li>
&lt;li>&lt;strong>ID mapping:&lt;/strong> Solr document IDs (strings) are converted to Qdrant UUIDs. The original Solr ID is stored in payload under &lt;code>--qdrant.id-field&lt;/code>.&lt;/li>
&lt;/ul>
&lt;h2 id="next-steps">Next Steps&lt;/h2>
&lt;p>After migration, verify your data arrived correctly with the &lt;a href="https://deploy-preview-2256--condescending-goldwasser-91acf0.netlify.app/documentation/migration-guidance/">Migration Verification Guide&lt;/a>.&lt;/p></description></item><item><title>From Qdrant</title><link>https://deploy-preview-2256--condescending-goldwasser-91acf0.netlify.app/documentation/migrate-to-qdrant/from-qdrant/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>info@qdrant.tech (Andrey Vasnetsov)</author><guid>https://deploy-preview-2256--condescending-goldwasser-91acf0.netlify.app/documentation/migrate-to-qdrant/from-qdrant/</guid><description>&lt;h1 id="migrate-between-qdrant-instances">Migrate Between Qdrant Instances&lt;/h1>
&lt;p>Use the &lt;code>qdrant&lt;/code> 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.&lt;/p>
&lt;h2 id="what-you-need">What You Need&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>Source Qdrant URL&lt;/strong> — gRPC endpoint of the source instance&lt;/li>
&lt;li>&lt;strong>Target Qdrant URL&lt;/strong> — gRPC endpoint of the target instance&lt;/li>
&lt;li>&lt;strong>Source collection name&lt;/strong>&lt;/li>
&lt;li>&lt;strong>Target collection name&lt;/strong> (must be different from source if using the same instance)&lt;/li>
&lt;li>&lt;strong>API keys&lt;/strong> — for each instance, if authentication is enabled&lt;/li>
&lt;/ul>
&lt;h2 id="concept-mapping">Concept Mapping&lt;/h2>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th style="text-align: left">Source Qdrant&lt;/th>
 &lt;th style="text-align: left">Target Qdrant&lt;/th>
 &lt;th style="text-align: left">Notes&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td style="text-align: left">Collection&lt;/td>
 &lt;td style="text-align: left">Collection&lt;/td>
 &lt;td style="text-align: left">Recreated with exact schema&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">Named vectors&lt;/td>
 &lt;td style="text-align: left">Named vectors&lt;/td>
 &lt;td style="text-align: left">All vector types preserved&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">Sparse vectors&lt;/td>
 &lt;td style="text-align: left">Sparse vectors&lt;/td>
 &lt;td style="text-align: left">Direct mapping&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">Payload&lt;/td>
 &lt;td style="text-align: left">Payload&lt;/td>
 &lt;td style="text-align: left">Direct mapping&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">Payload indexes&lt;/td>
 &lt;td style="text-align: left">Payload indexes&lt;/td>
 &lt;td style="text-align: left">Recreated if &lt;code>--target.ensure-payload-indexes&lt;/code> is &lt;code>true&lt;/code>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">Shard keys&lt;/td>
 &lt;td style="text-align: left">Shard keys&lt;/td>
 &lt;td style="text-align: left">Recreated automatically&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h2 id="run-the-migration">Run the Migration&lt;/h2>
&lt;h3 id="between-two-instances">Between Two Instances&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">docker run --net&lt;span class="o">=&lt;/span>host --rm -it registry.cloud.qdrant.io/library/qdrant-migration qdrant &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --source.url &lt;span class="s1">&amp;#39;http://source-instance:6334&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --source.api-key &lt;span class="s1">&amp;#39;source-api-key&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --source.collection &lt;span class="s1">&amp;#39;your-collection&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --target.url &lt;span class="s1">&amp;#39;https://your-instance.cloud.qdrant.io:6334&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --target.api-key &lt;span class="s1">&amp;#39;your-qdrant-api-key&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --target.collection &lt;span class="s1">&amp;#39;your-collection&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="within-the-same-instance">Within the Same Instance&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">docker run --net&lt;span class="o">=&lt;/span>host --rm -it registry.cloud.qdrant.io/library/qdrant-migration qdrant &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --source.url &lt;span class="s1">&amp;#39;http://localhost:6334&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --source.collection &lt;span class="s1">&amp;#39;original-collection&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --target.url &lt;span class="s1">&amp;#39;http://localhost:6334&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --target.collection &lt;span class="s1">&amp;#39;new-collection&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="with-parallel-workers">With Parallel Workers&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">docker run --net&lt;span class="o">=&lt;/span>host --rm -it registry.cloud.qdrant.io/library/qdrant-migration qdrant &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --source.url &lt;span class="s1">&amp;#39;http://source-instance:6334&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --source.api-key &lt;span class="s1">&amp;#39;source-api-key&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --source.collection &lt;span class="s1">&amp;#39;your-collection&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --target.url &lt;span class="s1">&amp;#39;https://your-instance.cloud.qdrant.io:6334&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --target.api-key &lt;span class="s1">&amp;#39;your-qdrant-api-key&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --target.collection &lt;span class="s1">&amp;#39;your-collection&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --migration.num-workers &lt;span class="m">4&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="all-source-flags">All Source Flags&lt;/h3>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th style="text-align: left">Flag&lt;/th>
 &lt;th style="text-align: left">Required&lt;/th>
 &lt;th style="text-align: left">Description&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>--source.collection&lt;/code>&lt;/td>
 &lt;td style="text-align: left">Yes&lt;/td>
 &lt;td style="text-align: left">Source collection name&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>--source.url&lt;/code>&lt;/td>
 &lt;td style="text-align: left">No&lt;/td>
 &lt;td style="text-align: left">Source gRPC URL (default: &lt;code>http://localhost:6334&lt;/code>)&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>--source.api-key&lt;/code>&lt;/td>
 &lt;td style="text-align: left">No&lt;/td>
 &lt;td style="text-align: left">API key for the source instance&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>--source.max-message-size&lt;/code>&lt;/td>
 &lt;td style="text-align: left">No&lt;/td>
 &lt;td style="text-align: left">Maximum gRPC message size in bytes (default: &lt;code>33554432&lt;/code> = 32 MB)&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h3 id="all-target-flags">All Target Flags&lt;/h3>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th style="text-align: left">Flag&lt;/th>
 &lt;th style="text-align: left">Required&lt;/th>
 &lt;th style="text-align: left">Description&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>--target.collection&lt;/code>&lt;/td>
 &lt;td style="text-align: left">Yes&lt;/td>
 &lt;td style="text-align: left">Target collection name&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>--target.url&lt;/code>&lt;/td>
 &lt;td style="text-align: left">No&lt;/td>
 &lt;td style="text-align: left">Target gRPC URL (default: &lt;code>http://localhost:6334&lt;/code>)&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>--target.api-key&lt;/code>&lt;/td>
 &lt;td style="text-align: left">No&lt;/td>
 &lt;td style="text-align: left">API key for the target instance&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>--target.ensure-payload-indexes&lt;/code>&lt;/td>
 &lt;td style="text-align: left">No&lt;/td>
 &lt;td style="text-align: left">Recreate payload indexes from source (default: &lt;code>true&lt;/code>)&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h3 id="parallel-worker-option">Parallel Worker Option&lt;/h3>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th style="text-align: left">Flag&lt;/th>
 &lt;th style="text-align: left">Default&lt;/th>
 &lt;th style="text-align: left">Description&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td style="text-align: left">&lt;code>--migration.num-workers&lt;/code>&lt;/td>
 &lt;td style="text-align: left">Number of CPU cores&lt;/td>
 &lt;td style="text-align: left">Number of parallel workers for migration&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h2 id="gotchas">Gotchas&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>Source and target must differ:&lt;/strong> You cannot migrate a collection to itself.&lt;/li>
&lt;li>&lt;strong>Parallel workers and resume:&lt;/strong> Migration progress is tracked per worker. If you change &lt;code>--migration.num-workers&lt;/code> between runs, the saved offsets are invalidated and the migration restarts from scratch. Use &lt;code>--migration.restart&lt;/code> explicitly if you intentionally want to change the worker count.&lt;/li>
&lt;li>&lt;strong>Large messages:&lt;/strong> If you encounter gRPC message size errors, increase &lt;code>--source.max-message-size&lt;/code>.&lt;/li>
&lt;li>&lt;strong>Existing target collection:&lt;/strong> If the target collection already exists, the tool uses it as-is without modifying the schema.&lt;/li>
&lt;/ul>
&lt;h2 id="next-steps">Next Steps&lt;/h2>
&lt;p>After migration, verify your data arrived correctly with the &lt;a href="https://deploy-preview-2256--condescending-goldwasser-91acf0.netlify.app/documentation/migration-guidance/">Migration Verification Guide&lt;/a>.&lt;/p></description></item></channel></rss>