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