Questions
6 of 12
1A client gets a dimension-mismatch error when inserting a point. What are the most common root causes?
2A filter query that should return results returns an empty list. What would you check first?
3Why might a collection created without specifying a distance metric or vector size fail immediately, and what does that tell you about how Qdrant treats collection configuration?
4What causes a 'collection not found' error immediately after a collection was reportedly created successfully in a distributed cluster?
5Search results seem semantically wrong even though the embedding model is known to work well. What layers would you check to isolate the problem?
6Recall dropped noticeably after enabling quantization. How would you determine whether the quantization configuration or the rescoring settings are the cause?
7A previously fast query has become slow after months of continuous upserts and deletes, with no configuration changes. What's the most likely explanation?
8How would you distinguish a latency problem caused by disk I/O from one caused by CPU-bound distance computation?
9One node in a three-node Qdrant cluster crashes. What happens to reads and writes for shards that had a replica on that node?
10After a crashed node recovers and rejoins the cluster, how does it catch up on writes it missed?
11What symptoms would indicate a 'split-brain' style problem in a distributed Qdrant cluster, and how does the Raft-based consensus layer prevent it?
12What's your recovery plan if an entire Qdrant cluster is lost (e.g., all nodes' disks fail) and you only have periodic snapshots?
06 / 12

Recall dropped noticeably after enabling quantization. How would you determine whether the quantization configuration or the rescoring settings are the cause?

Isolate by comparing quantization settings against an unquantized baseline

The first step is to establish a baseline: measure recall@k against exact ground truth on the unquantized collection. Without this, you cannot know how much recall was lost or whether the loss is due to quantization at all. The second step is to measure recall on the quantized collection with rescoring and oversampling fully enabled, at the recommended settings for the scheme (e.g. oversampling 3 for binary quantization). This tells you the best-case recall for that quantization configuration. The third step is to measure recall with rescoring off. The difference between rescoring-on and rescoring-off isolates the contribution of rescoring. The fourth step is to sweep oversampling values (1, 2, 3, 5, 10) at rescoring-on, which tells you whether the loss is due to insufficient candidate coverage. If recall recovers with higher oversampling, the problem was the oversampling factor, not the quantization scheme itself. If recall does not recover, the quantization scheme is too aggressive for this data.

The mechanism behind these comparisons is that quantization has two separate effects. The first is on the distance computations during graph traversal: the quantized vectors approximate the true distances, which can cause the traversal to miss the correct neighborhood. The second is on the ranking of the candidate set: even if the correct points are retrieved, the quantized distance may rank them incorrectly. Rescoring addresses the second effect by re-ranking with full-precision vectors, and oversampling addresses the first by retrieving more candidates to compensate for the traversal's imprecision. So if recall is low with rescoring on and high oversampling, the traversal is the problem; if recall is low even with rescoring on and high oversampling, the quantization scheme is too lossy for the data. This decomposition is what lets you pinpoint the cause and choose the right fix. It also matters to compare like with like: if you change ef, m, or the candidate set size at the same time as enabling quantization, you cannot attribute the recall change to quantization.

  1. 1

    Baseline: exact ground truth on the unquantized collection, same queries.

  2. 2

    Quantized with rescoring on, recommended oversampling: best-case recall for the scheme.

  3. 3

    Quantized with rescoring off: isolates the rescoring contribution.

  4. 4

    Oversampling sweep: tells you whether the loss is coverage or scheme quality.

  5. 5

    Control variables: hold ef, m, and candidate set sizes fixed across all measurements.

  6. 6

    Scheme comparison: try scalar vs binary vs product on the same data to see the trade-off curve.

  7. 7

    Query distribution: use real queries, not random vectors, because the effect is distribution-dependent.

The trade-off is between accuracy and the cost of the quantization configuration. Higher oversampling recovers recall but increases the rescoring cost, which increases latency. Keeping the quantization scheme and raising oversampling is usually the first fix because it preserves the memory savings. Switching to a less aggressive scheme (binary to scalar, scalar to none) recovers accuracy but gives up memory savings. The common mistake is to measure recall on the quantized collection without rescoring and conclude that quantization is unusable - that is not a fair test because the design assumes rescoring. The second mistake is to change the quantization scheme and the rescoring settings at the same time, which makes it impossible to attribute the recall change. The third mistake is to use random query vectors for the benchmark, which do not reflect the distribution of real queries and can overstate or understate the recall loss. Version note: the supported quantization schemes, the oversampling parameter, and the default rescoring behavior have changed across Qdrant releases. Some versions automatically enable rescoring for binary quantization; others require it to be set explicitly. Verify the defaults on your version before drawing conclusions.

javascript

Version-dependent: the quantization search parameters and the default rescoring behavior have changed across Qdrant releases. In some versions, the quantization config includes an always_ram option that affects whether the quantized vectors are used for traversal, and the QuantizationSearchParams shape has evolved. Always set rescore and oversampling explicitly in the benchmark rather than relying on defaults, and benchmark on the same version you plan to deploy.

Difficulty: 8/10
Topics: Quantization, Recall, Oversampling and Rescoring

Scenario Questions

0-2 years experience
  1. 1

    You enable binary quantization and recall drops by 5 points. Explain the first benchmark you would run to determine whether rescoring is the issue.

  2. 2

    A teammate disables rescoring to save latency and recall collapses. Explain why rescoring is essential for binary quantization.

2-5 years experience
  1. 1

    You switch from scalar to binary quantization and recall drops more than expected. Walk through the diagnosis to determine whether the scheme or the configuration is the cause.

  2. 2

    Recall drops only on a specific subset of queries after quantization. Describe how you would investigate and what you might do about it.

5-8 years experience
  1. 1

    Design a benchmark harness that compares quantization configurations at fixed memory budgets, so that the comparison is fair and the trade-offs are visible.

  2. 2

    You need to choose between binary quantization with oversampling 5 and scalar quantization with oversampling 2, both fitting the same memory budget. Describe the experiment and the decision criteria.

8+ years experience
  1. 1

    Derive the relationship between oversampling factor, quantization scheme accuracy, and recall at k, and explain how you would use it to choose a configuration for a given recall target.

  2. 2

    You are building a system that adaptively adjusts quantization and oversampling based on observed query difficulty. Describe the feedback loop and how you would prevent instability.

Follow-up Questions

  • How would you decide between increasing oversampling and switching to a less aggressive quantization scheme, given the latency and memory impact of each?
  • If recall drops only for a subset of queries after enabling quantization, what does that tell you about the data and how would you investigate?