<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Migration Guidance on Qdrant - Vector Search Engine</title><link>https://deploy-preview-2256--condescending-goldwasser-91acf0.netlify.app/documentation/migration-guidance/</link><description>Recent content in Migration Guidance on Qdrant - Vector Search Engine</description><generator>Hugo</generator><language>en-us</language><managingEditor>info@qdrant.tech (Andrey Vasnetsov)</managingEditor><webMaster>info@qdrant.tech (Andrey Vasnetsov)</webMaster><atom:link href="https://deploy-preview-2256--condescending-goldwasser-91acf0.netlify.app/documentation/migration-guidance/index.xml" rel="self" type="application/rss+xml"/><item><title>Pre-Migration Baseline</title><link>https://deploy-preview-2256--condescending-goldwasser-91acf0.netlify.app/documentation/migration-guidance/pre-migration-baseline/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>info@qdrant.tech (Andrey Vasnetsov)</author><guid>https://deploy-preview-2256--condescending-goldwasser-91acf0.netlify.app/documentation/migration-guidance/pre-migration-baseline/</guid><description>&lt;h1 id="pre-migration-baseline">Pre-Migration Baseline&lt;/h1>
&lt;p>Establishing a baseline is paramount for migration verification. If you don&amp;rsquo;t capture what &amp;ldquo;correct&amp;rdquo; looks like before you migrate, you have nothing to compare against afterward. This page covers what to record from your source system before starting the migration.&lt;/p>
&lt;h2 id="what-to-capture">What to Capture&lt;/h2>
&lt;p>There are four pieces of information that need to be accounted for when establishing a baseline: collection/index inventory, metadata samples, baseline search results, and system configuration snapshots.&lt;/p></description></item><item><title>Data Integrity</title><link>https://deploy-preview-2256--condescending-goldwasser-91acf0.netlify.app/documentation/migration-guidance/data-integrity/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>info@qdrant.tech (Andrey Vasnetsov)</author><guid>https://deploy-preview-2256--condescending-goldwasser-91acf0.netlify.app/documentation/migration-guidance/data-integrity/</guid><description>&lt;h1 id="data-integrity-verification">Data Integrity Verification&lt;/h1>
&lt;p>Once you&amp;rsquo;ve established a &lt;a href="https://deploy-preview-2256--condescending-goldwasser-91acf0.netlify.app/documentation/migration-guidance/pre-migration-baseline/">baseline&lt;/a>, you first need to check data integrity. Data integrity answers the question: &amp;ldquo;Did all my data arrive, and did it arrive correctly?&amp;rdquo; These are the fastest checks to run and catch the most common migration failures.&lt;/p>
&lt;h2 id="1-vector-count-verification">1. Vector Count Verification&lt;/h2>
&lt;p>The simplest check: does the number of vectors in Qdrant match your source system?&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-py" data-lang="py">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">qdrant_client&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">QdrantClient&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">client&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">QdrantClient&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;localhost&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">port&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">6333&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Get collection info&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">collection_info&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">client&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get_collection&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;your_collection&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">qdrant_count&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">collection_info&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">points_count&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Compare against baseline&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">source_count&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">baseline&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;total_vector_count&amp;#34;&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="c1"># From pre-migration capture&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">if&lt;/span> &lt;span class="n">qdrant_count&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="n">source_count&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;✓ Vector count matches: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">qdrant_count&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">else&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">diff&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">source_count&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="n">qdrant_count&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">pct&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">diff&lt;/span> &lt;span class="o">/&lt;/span> &lt;span class="n">source_count&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="mi">100&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;✗ Count mismatch: source=&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">source_count&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">, qdrant=&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">qdrant_count&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">, &amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;missing=&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">diff&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2"> (&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">pct&lt;/span>&lt;span class="si">:&lt;/span>&lt;span class="s2">.2f&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">%)&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>Common causes of count mismatches:&lt;/strong>&lt;/p></description></item><item><title>Search Quality</title><link>https://deploy-preview-2256--condescending-goldwasser-91acf0.netlify.app/documentation/migration-guidance/search-quality/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>info@qdrant.tech (Andrey Vasnetsov)</author><guid>https://deploy-preview-2256--condescending-goldwasser-91acf0.netlify.app/documentation/migration-guidance/search-quality/</guid><description>&lt;h1 id="search-quality-verification">Search Quality Verification&lt;/h1>
&lt;p>Two systems can hold identical vectors and produce different search results because of differences in indexing, quantization, scoring, and filtering implementation.&lt;/p>
&lt;p>This is perhaps the hardest part of migration verification. The guide breaks it into &lt;strong>three tiers&lt;/strong> so you can pick the level of rigor that matches your resources and risk tolerance.&lt;/p>
&lt;h2 id="three-tiered-search-quality-checks">Three-Tiered Search Quality Checks&lt;/h2>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>Tier&lt;/th>
 &lt;th>Effort&lt;/th>
 &lt;th>What It Catches&lt;/th>
 &lt;th>When to Use&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;strong>Tier 1: Spot-Check&lt;/strong>&lt;/td>
 &lt;td>15 min&lt;/td>
 &lt;td>Gross failures: wrong metric, broken filters, obviously wrong results&lt;/td>
 &lt;td>Every migration&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;strong>Tier 2: Statistical Sampling&lt;/strong>&lt;/td>
 &lt;td>1-2 hours&lt;/td>
 &lt;td>Systematic recall degradation, filter interaction bugs, score distribution shifts&lt;/td>
 &lt;td>Production workloads, &amp;gt;100K vectors&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;strong>Tier 3: Gold-Standard Evaluation&lt;/strong>&lt;/td>
 &lt;td>Half day to days&lt;/td>
 &lt;td>Measurable relevance changes with confidence intervals&lt;/td>
 &lt;td>High-stakes search (revenue, safety), regulated industries&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;p>&lt;strong>Our recommendation:&lt;/strong> Every migration should run Tier 1 and Tier 2. Tier 3 is for teams that have (or can build) labeled evaluation data. If you don&amp;rsquo;t have labeled data today, Tier 2 gives you a strong quantitative baseline and this guide shows you how to build toward Tier 3 over time.&lt;/p></description></item><item><title>Diagnosing Discrepancies</title><link>https://deploy-preview-2256--condescending-goldwasser-91acf0.netlify.app/documentation/migration-guidance/diagnosing-discrepancies/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>info@qdrant.tech (Andrey Vasnetsov)</author><guid>https://deploy-preview-2256--condescending-goldwasser-91acf0.netlify.app/documentation/migration-guidance/diagnosing-discrepancies/</guid><description>&lt;h1 id="diagnosing-discrepancies">Diagnosing Discrepancies&lt;/h1>
&lt;p>When verification catches a problem, you need to determine whether it&amp;rsquo;s a data issue (something went wrong during migration) or a configuration issue (the data is correct but the systems behave differently). This page provides a diagnostic decision tree and vendor-specific gotchas.&lt;/p>
&lt;h2 id="decision-tree">Decision Tree&lt;/h2>
&lt;p>Start here when any verification check fails:&lt;/p>
&lt;pre tabindex="0">&lt;code>Is the vector count wrong?
├─ Yes → Data-level issue
│ ├─ Count lower than expected → Check migration script logs for errors,
│ │ timeouts, or partial failures. Re-run for missing segments.
│ ├─ Count higher than expected → Check for duplicate inserts (retried batches)
│ │ or source count excluding namespaces/partitions.
│ └─ Count matches but IDs differ → ID mapping error during migration.
│
└─ No (count matches) → Continue
 │
 Are metadata fields missing or wrong type?
 ├─ Yes → Payload mapping issue
 │ ├─ Fields missing → Source system may omit null fields on export.
 │ │ Check migration script&amp;#39;s null handling.
 │ ├─ Types changed → See &amp;#34;Type Coercion&amp;#34; section below.
 │ └─ Values differ → Encoding issue (UTF-8, special characters, unicode normalization).
 │
 └─ No (metadata looks correct) → Continue
 │
 Are search results completely different?
 ├─ Yes → Configuration-level issue
 │ ├─ Check distance metric (most common cause)
 │ ├─ Check if index is built (HNSW may not be built yet on fresh data)
 │ └─ Check if vectors are normalized (affects cosine vs. dot product)
 │
 └─ No (results overlap but differ at the margins) → Expected behavior
 │
 Is recall@10 below 0.85?
 ├─ Yes → Indexing parameter mismatch
 │ ├─ Compare HNSW ef_construction and M values
 │ ├─ Compare ef (search-time) parameters
 │ └─ Check quantization settings
 │
 └─ No → Migration is working correctly.
 Results differ on borderline cases due to
 ANN approximation. This is normal.
&lt;/code>&lt;/pre>&lt;h2 id="configuration-level-issues">Configuration-Level Issues&lt;/h2>
&lt;h3 id="distance-metric-mismatch">Distance Metric Mismatch&lt;/h3>
&lt;p>The most impactful configuration error. Here&amp;rsquo;s how metrics map across systems:&lt;/p></description></item></channel></rss>