Building the fastest vector search engine I could

33 min readUpdated

Queries that ask for up to five thousand nearest neighbors. What I built for them, how it compares with Qdrant and with a graph index of my own, and how it works.

Every time someone opens an item, a recommendation service I work on embeds it and asks for the catalog items nearest to it. A rail of similar items needs ten. A ranking model further down needs 5,000, because it re-scores the whole set before anything is shown.

I built a search engine for that query in Rust. I measured it on 100,000,000 catalog vectors on one machine, against Qdrant, which serves this query today, and against a graph index I wrote on the same kernels.

  • Behind HTTP the engine’s lead over the incumbent grew with depth. At K = 10 and recall 0.95 Qdrant was as fast or faster. At K = 5,000 the engine served 10.4 times its throughput, part of it from how I configured Qdrant. Qdrant reached 0.99 at no depth I swept, and the engine at every depth.
  • On public data, with the incumbent set up as its documentation says, the lead was smaller. On DEEP-100M, with Qdrant in two segments over gRPC, the engine served 1.9 times Qdrant’s peak at K = 5,000 and recall 0.99. At K = 10 Qdrant served up to 2.1 times the engine’s.
  • Against my own graph index the engine won at depth. At K = 5,000 and recall 0.99, in process on the same kernels, it answered 1.9 times the queries of my HNSW, and 3.3 times at 0.995.
  • At shallow depth and modest recall the graph is faster. At K = 10 HNSW answered 268,245 queries a second at recall 0.95. The engine’s cheapest setting already recalled 0.989, and at that recall it answered 7% more than HNSW.
  • The engine is an inverted file over byte codes with an fp32 rerank. The codes read a quarter of the bytes and the rerank removes the recall ceiling they leave. The index holds 65.4 GB.
0:00.0 / 0:19.6
The deepest request is 500 times the depth most benchmarks stop at, and this post measures K = 10, 100, 1,000 and 5,000. Each ring holds one drawn point for every 10 neighbors at its depth, because at true scale the 5,000 nearest of 100,000,000 vectors would be 0.21 of one drawn point. The cloud is drawn in three dimensions for the eye, the real vectors have 128, and the red misses are illustrative.

A query asks for up to five thousand neighbors

Each catalog item is an embedding of 128 numbers, normalized to unit length, and similarity is the dot product. A query is one more vector of the same kind. The answer is the K catalog items with the highest dot product against it.

The corpus is 100,000,000 items drawn at random from the 104,998,168 live ones. The 4,998,168 left out supply 3,000 item queries, so no query is its own nearest neighbor. A second set of 1,000 text embeddings asks from outside the catalog, and I report it beside the item queries, not mixed in.

Recall is the overlap between the returned set and the exact answer. Order inside the K does not count, because the ranker re-scores the set.

recall@K = | approximate top K  ∩  exact top K | / K

I measured four depths, K = 10, 100, 1,000 and 5,000, and the answer to which index is fastest changes between the first and the last.

How I measured

Everything below ran on the machine in the card, one configuration at a time.

  • Every engine got the same cores. Each ran pinned to the same 44 of the machine’s 48. The load generator and the resource sampler had cores of their own, and nothing else ran.
  • Every engine started from the same bytes. The corpus sat in RAM on tmpfs. My engines built their indexes from a mapping of it and held them in their own heap, and Qdrant kept its own copy on the same tmpfs.
  • Recall carries its spread. Each setting answered all 3,000 item queries in three splits of 1,000. The data section gives the worst split and the 95% interval beside every mean.
  • Throughput was measured twice. In process, 44 threads ran queries back to back for 15 seconds after 3 of warm-up. Served, one load generator drove each engine’s HTTP API at 1 to 176 clients.
  • Resources came from the kernel. CPU time is from getrusage and /proc, and memory is split into heap, file pages and shared memory. The VM exposes no hardware counters, so there are no cache miss numbers.
  • Bandwidth was checked before every in-process configuration. A 44-thread streaming read measured 331 to 346 GB/s each time, so none of those runs started on a degraded machine.

An exact scan reads the whole catalog

The simplest correct engine compares the query with every vector and keeps the best K. It is correct by definition, so it is the ruler for everything else. It also reads all 51.2 GB of fp32 vectors on every query.

0:00.0 / 0:24.0
Scans started together read each block once between them, so 44 of them score 2.5 times what memory delivers. Started apart they score less, though still above memory's rate, which suggests they drift back into step. Each of the 1,248 blocks stands for about 41 MB of the 51.2 GB of fp32 vectors, and the neighbor marks are placed at random, because catalog order has nothing to do with the query. The scan rates were measured with 44 threads over 15 s, and memory's 360 GB/s with each thread reading its own part.

One thread took a median 2.23 s per query, measured over 20 queries. With 44 threads the machine finished 17.6 queries a second, 901 GB/s of vectors scored. With every thread reading its own part of memory the machine delivers 360 GB/s, so scans running side by side must share cache lines that a neighbor just fetched.

A read test shows that threads can share reads. Forty-four threads reading the same bytes at the same time read 969 GB/s, and each reading its own part 360 GB/s, averaged over two runs.

I also started each exact scan somewhere else. Each query began at an offset derived from its own values and wrapped around, and recall did not change. At 22 threads the scans finished 6.8 queries a second instead of 9.5, 348 GB/s, about what memory delivers.

Scans started apart seem to drift back into step. At 44 threads they finished 10.3 queries a second, 527 GB/s. In the read test 44 threads started at evenly spaced places read 734 GB/s, more than memory delivers, which suggests they drift together and share lines again.

Byte codes make the exact scan faster and less exact. The same scan over SQ8 codes finished 26.4 queries a second, and its recall stopped at 0.890 for K = 10. Any index that scores these SQ8 codes alone inherits that ceiling.

Three ways to read less

Approximate search buys speed by reading a small part of the catalog, or a small version of it, and accepting an occasional miss. The two designs that dominate skip vectors in opposite ways, and codes shrink whichever vectors remain.

IVF divides the space into cells

An inverted file index (IVF) runs k-means once over the catalog, so every vector belongs to one of nlist cells and sits in that cell’s list. A query compares itself with the cell centers, opens the nprobe nearest cells, and scores every vector in them.

0:00.0 / 0:25.0
Asking for 40 results instead of 10 scores no extra vectors and only changes how many of the scored ones come back. I drew it at teaching scale, with 1,400 points and 24 cells where the real index has 65,536. In the drawing, a fourth cell scores 28 more and lifts recall at K = 40 from 0.90 to 1.00.
  • Its reads are sequential. Each opened list is one contiguous run of memory, read front to back.
  • Its scan does not depend on K. Asking for 10 results or 5,000 changes which scored vectors come back, not how many get scored.
  • Its misses sit near cell walls. A true neighbor is lost only when it belongs to a cell the query did not open, and opening one more cell usually recovers it.

HNSW walks a graph

A hierarchical navigable small world graph (HNSW) links every vector to a few near neighbors, with sparser layers of longer links on top. A query enters at the top and hops greedily toward its target, dropping a layer each time it stops improving.

On the bottom layer it keeps a working set of the best candidates it has seen. ef_search sets its size.

0:00.0 / 0:26.0
A working set of 160 visits 210 nodes where a set of 10 visits 24, and each visit reads a scattered place in memory. The search returns only what its working set holds, so K = 5,000 results need a working set of at least 5,000. I drew it at teaching scale, on a seeded graph whose layers hold 820, 90 and 10 nodes.

A graph search can only return what its working set held, so a query for K results needs a working set of at least K. A bigger working set visits many more nodes, and each visit is a read from a random place in memory.

Codes shrink every vector

A code replaces each 512-byte vector with a smaller approximation. A scan over codes reads fewer bytes and computes every score approximately. SQ8 keeps one byte per dimension. Product quantization and RaBitQ keep far less, and need a second pass that rescores a shortlist from a larger copy.

0:00.0 / 0:26.0
Each code is smaller than the one before and leaves more error in the bars, so the engine scores codes first and rescores only a shortlist from fp32. SQ8's error stays under a pixel at the bars' scale, and its measured median score error is 0.0005. At K = 5,000 the engine scored 42,834 vectors from SQ8 codes and rescored 10,000 from fp32. The vector and its pair cloud are synthetic and seeded, RaBitQ is drawn without its random rotation, and the byte counts and funnel counts are the engine's.
Show data
CodeBytes per vectorGB for 100,000,000 vectors
fp3251251.2
SQ812812.8
PQ323.2
RaBitQ202.0

Five settings control these indexes.

Setting Index What it controls
nlist IVF How many cells the catalog is divided into
nprobe IVF How many cells a query opens
rerank_n IVF, HNSW How many shortlisted candidates are rescored in fp32
M, ef_construct HNSW Links per node, and how widely the build searches for them
ef_search HNSW The working set a query carries, at least K

Depth decides the index

Each curve in the frontier is one index swept from its cheapest setting to its most thorough, in process on 44 threads, so a query pays for the search and nothing else. Throughput at a given recall is interpolated between the two measured settings either side of it.

0:00.0 / 0:27.0
Each curve is one index swept from its cheapest setting to its most thorough, and up and to the right is better. The dashed line is where the ranking is read, not a requirement, and a recall after a name in the list means that approach's cheapest setting already passed the line. IVF over fp32 ran on 16,384 cells where the rest of IVF ran on 65,536.
Show data
ApproachKRecallQueries per second
exact scan100.998118
exact scan1000.999818
exact scan1,0001.000018
exact scan5,0001.000018
exact scan, SQ8100.890326
exact scan, SQ81000.943426
exact scan, SQ81,0000.973026
exact scan, SQ85,0000.984226
IVF100.994712,315
IVF100.99716,432
IVF100.99764,380
IVF100.99793,325
IVF100.99802,244
IVF100.99811,698
IVF1000.993612,318
IVF1000.99836,434
IVF1000.99914,381
IVF1000.99943,327
IVF1000.99972,244
IVF1000.99971,698
IVF1000.99981,140
IVF1000.9998858
IVF1000.9998572
IVF1,0000.983512,249
IVF1,0000.99536,411
IVF1,0000.99774,367
IVF1,0000.99863,321
IVF1,0000.99942,242
IVF1,0000.99971,697
IVF1,0000.99991,139
IVF1,0000.9999857
IVF1,0000.9999575
IVF1,0001.0000432
IVF1,0001.0000286
IVF5,0000.955412,030
IVF5,0000.98726,345
IVF5,0000.99424,337
IVF5,0000.99653,304
IVF5,0000.99842,233
IVF5,0000.99911,693
IVF5,0000.99951,137
IVF5,0000.9997856
IVF5,0000.9998574
IVF5,0000.9999432
IVF5,0000.9999288
IVF5,0001.0000216
IVF, SQ8100.883044,676
IVF, SQ8100.887535,198
IVF, SQ8100.888529,314
IVF, SQ8100.889225,111
IVF, SQ8100.889819,555
IVF, SQ8100.889816,053
IVF, SQ8100.890011,819
IVF, SQ8100.89029,369
IVF, SQ8100.89036,625
IVF, SQ81000.929144,236
IVF, SQ81000.938635,065
IVF, SQ81000.940829,083
IVF, SQ81000.941924,978
IVF, SQ81000.942619,477
IVF, SQ81000.942916,005
IVF, SQ81000.943211,795
IVF, SQ81000.94339,349
IVF, SQ81000.94346,614
IVF, SQ81000.94345,121
IVF, SQ81000.94343,523
IVF, SQ81000.94342,687
IVF, SQ81,0000.931242,575
IVF, SQ81,0000.959533,961
IVF, SQ81,0000.966528,341
IVF, SQ81,0000.969324,356
IVF, SQ81,0000.971319,095
IVF, SQ81,0000.972115,749
IVF, SQ81,0000.972611,657
IVF, SQ81,0000.97289,259
IVF, SQ81,0000.97296,567
IVF, SQ81,0000.97295,089
IVF, SQ81,0000.97293,508
IVF, SQ81,0000.97302,679
IVF, SQ85,0000.841638,363
IVF, SQ85,0000.934530,681
IVF, SQ85,0000.960625,881
IVF, SQ85,0000.970922,503
IVF, SQ85,0000.978517,884
IVF, SQ85,0000.981214,924
IVF, SQ85,0000.983011,185
IVF, SQ85,0000.98358,956
IVF, SQ85,0000.98396,420
IVF, SQ85,0000.98404,991
IVF, SQ85,0000.98413,462
IVF, SQ85,0000.98422,652
IVF, SQ8 + rerank100.988743,265
IVF, SQ8 + rerank100.994234,458
IVF, SQ8 + rerank100.995628,723
IVF, SQ8 + rerank100.996424,627
IVF, SQ8 + rerank100.996919,312
IVF, SQ8 + rerank100.997015,904
IVF, SQ8 + rerank100.997211,761
IVF, SQ8 + rerank100.99749,346
IVF, SQ8 + rerank100.99766,629
IVF, SQ8 + rerank1000.977043,107
IVF, SQ8 + rerank1000.980341,959
IVF, SQ8 + rerank1000.989034,355
IVF, SQ8 + rerank1000.992433,606
IVF, SQ8 + rerank1000.995328,117
IVF, SQ8 + rerank1000.996624,238
IVF, SQ8 + rerank1000.997519,030
IVF, SQ8 + rerank1000.998015,715
IVF, SQ8 + rerank1000.998311,655
IVF, SQ8 + rerank1000.99859,275
IVF, SQ8 + rerank1000.99866,591
IVF, SQ8 + rerank1000.99865,116
IVF, SQ8 + rerank1000.99873,530
IVF, SQ8 + rerank1000.99872,696
IVF, SQ8 + rerank1,0000.948934,408
IVF, SQ8 + rerank1,0000.949428,786
IVF, SQ8 + rerank1,0000.982028,359
IVF, SQ8 + rerank1,0000.990724,300
IVF, SQ8 + rerank1,0000.994321,294
IVF, SQ8 + rerank1,0000.994818,803
IVF, SQ8 + rerank1,0000.997017,145
IVF, SQ8 + rerank1,0000.997515,464
IVF, SQ8 + rerank1,0000.998014,388
IVF, SQ8 + rerank1,0000.998613,187
IVF, SQ8 + rerank1,0000.998810,867
IVF, SQ8 + rerank1,0000.999310,183
IVF, SQ8 + rerank1,0000.99958,304
IVF, SQ8 + rerank1,0000.99976,103
IVF, SQ8 + rerank1,0000.99984,810
IVF, SQ8 + rerank1,0000.99983,388
IVF, SQ8 + rerank1,0000.99992,606
IVF, SQ8 + rerank5,0000.844617,608
IVF, SQ8 + rerank5,0000.941913,858
IVF, SQ8 + rerank5,0000.970912,759
IVF, SQ8 + rerank5,0000.982912,304
IVF, SQ8 + rerank5,0000.992211,170
IVF, SQ8 + rerank5,0000.99569,979
IVF, SQ8 + rerank5,0000.99808,194
IVF, SQ8 + rerank5,0000.99886,952
IVF, SQ8 + rerank5,0000.99895,432
IVF, SQ8 + rerank5,0000.99945,338
IVF, SQ8 + rerank5,0000.99954,453
IVF, SQ8 + rerank5,0000.99964,324
IVF, SQ8 + rerank5,0000.99973,733
IVF, SQ8 + rerank5,0000.99983,138
IVF, SQ8 + rerank5,0000.99982,823
IVF, SQ8 + rerank5,0000.99992,263
HNSW100.8492740,059
HNSW100.9091488,279
HNSW100.9436312,246
HNSW100.9647189,107
HNSW100.9779111,485
HNSW100.985765,519
HNSW100.989038,339
HNSW1000.9592160,010
HNSW1000.9736116,339
HNSW1000.978294,521
HNSW1000.987955,186
HNSW1000.990232,005
HNSW1000.992218,131
HNSW1,0000.985226,591
HNSW1,0000.991019,003
HNSW1,0000.992514,983
HNSW1,0000.99438,253
HNSW1,0000.99544,442
HNSW5,0000.98876,722
HNSW5,0000.99364,704
HNSW5,0000.99483,606
HNSW5,0000.99532,481
HNSW5,0000.99561,894
HNSW5,0000.9961983
HNSW, SQ8100.77371,060,473
HNSW, SQ8100.8155714,121
HNSW, SQ8100.8439450,159
HNSW, SQ8100.8636272,613
HNSW, SQ8100.8751162,008
HNSW, SQ8100.881896,283
HNSW, SQ8100.885055,556
HNSW, SQ81000.9102230,422
HNSW, SQ81000.9205168,814
HNSW, SQ81000.9238136,870
HNSW, SQ81000.932280,623
HNSW, SQ81000.933946,045
HNSW, SQ81000.935225,707
HNSW, SQ81,0000.961338,302
HNSW, SQ81,0000.965027,048
HNSW, SQ81,0000.966121,129
HNSW, SQ81,0000.967111,602
HNSW, SQ81,0000.96776,192
HNSW, SQ85,0000.97529,398
HNSW, SQ85,0000.97856,526
HNSW, SQ85,0000.97944,992
HNSW, SQ85,0000.97973,425
HNSW, SQ85,0000.97992,604
HNSW, SQ85,0000.98031,326
HNSW, SQ8 + rerank100.8898664,586
HNSW, SQ8 + rerank100.9243431,330
HNSW, SQ8 + rerank100.9468265,571
HNSW, SQ8 + rerank100.9595159,061
HNSW, SQ8 + rerank100.966792,996
HNSW, SQ8 + rerank100.970155,213
HNSW, SQ8 + rerank1000.9732119,245
HNSW, SQ8 + rerank1000.982973,950
HNSW, SQ8 + rerank1000.985043,911
HNSW, SQ8 + rerank1000.986525,017
HNSW, SQ8 + rerank1,0000.991717,539
HNSW, SQ8 + rerank1,0000.993110,378
HNSW, SQ8 + rerank1,0000.99395,820
HNSW, SQ8 + rerank5,0000.99453,997
HNSW, SQ8 + rerank5,0000.99512,921
HNSW, SQ8 + rerank5,0000.99542,300
HNSW, SQ8 + rerank5,0000.99591,231

The engine in yellow is IVF over 65,536 cells with SQ8 codes and an fp32 rerank. I wrote HNSW on the same fp32 and SQ8 dot-product kernels, so kernel speed does not explain the gap between them.

  • At ten results the graph is faster where modest recall is enough. At recall 0.95 HNSW answered 268,245 queries a second. The engine’s cheapest measured setting already recalled 0.989 and answered 43,265, 7% more than HNSW at that recall. HNSW’s sweep ended at 0.989, and at 0.99 the engine answered 40,973.
  • At a hundred they meet. HNSW led 3.7 times at recall 0.95 against the engine’s cheapest setting, which recalled 0.977. At 0.99 it answered 33,293 queries a second and the engine 34,126, and above 0.992 only the engine reached.
  • At a thousand the engine leads from 0.99 up. It answered 24,613 queries a second at 0.99 against 20,115, and 18,665 against 5,531 at 0.995.
  • At five thousand the engine leads at every recall. A graph cannot carry a working set smaller than K, so HNSW’s cheapest setting here was ef_search = 5,000. The engine answered 11,428 queries a second at 0.99, 1.9 times HNSW, and 3.3 times at 0.995.

If 0.95 is enough at K = 5,000, the fp32 copy is not needed at all. SQ8 codes alone on the same 65,536 cells answered 27,734 queries a second at that recall from 14.2 GB, three times the fastest HNSW.

Text queries are harder for both indexes. At K = 10 the engine at 8 cells recalled 0.869 of the true ten for text queries against 0.989 for item queries, and HNSW at ef_search = 640 recalled 0.884 against 0.989.

The exact SQ8 scan went the other way on text queries, 0.954 against 0.890, so the loss comes from which vectors the indexes skip and not from the code.

Behind HTTP the gap to Qdrant grows with depth

In process a query pays only for the search. A service also parses the request, waits for a thread, and serializes K results back. I ran the engine and Qdrant behind their HTTP APIs on the same 44 cores, and drove both from one load generator on two other cores.

  • The incumbent, with its default graph. Qdrant 1.19.0, one collection, dot product, M = 16 and ef_construct = 100, in three segments. Its fp32 vectors were mapped from tmpfs and an int8 copy was held in RAM. I measured it searching fp32, and searching int8 with a rescore at twice oversampling.
  • The incumbent, rebuilt with my graph’s settings. A second Qdrant collection with M = 16 and ef_construct = 200, the settings my HNSW used, searched in fp32 with ef_search up to 2,048 at K = 10 and 40,000 at K = 5,000.
  • The engine as proposed. 65,536 anisotropic cells, SQ8 codes and a rerank of max(2K, 200). It answered in JSON as Qdrant does, and once more in a binary format.
  • The same response per request. Both returned ids and scores and no payloads. The load generator built every request body before the clock started and parsed recall from every response.
0:00.0 / 0:33.0
Both servers ran behind their HTTP APIs, on the same 44 cores, driven by the same load generator. Each curve is the fastest measured setting that reaches recall 0.95, and the ranked peaks are each curve's best client count.
Peak queries per second behind HTTP in the closed-loop sweep, from 1 to 176 clients
KQdrant defaults, best recallat 0.95Qdrant ef_construct 200, best recallat 0.95at 0.98Engine at 0.95at 0.98at 0.99Engine ÷ faster Qdrant at 0.95at 0.98
100.95415,9740.98340,7459,30341,19641,19633,0831.0×4.4×
1000.96210,9620.98225,3226,08440,65432,79827,5021.6×5.4×
1,0000.9695,0920.9814,9312,50925,96625,96622,4195.1×10.3×
5,0000.9731,1920.9821,16195012,38111,50410,16410.4×12.1×
  • The denser graph lifted Qdrant’s recall. At ef_search = 512 it raised recall at K = 10 from 0.954 to 0.977, and it reached 0.983 at 2,048, still rising. At K = 5,000 it flattened at 0.982. My HNSW with the same graph settings reached 0.989 at K = 10 and 0.996 at K = 5,000.
  • At ten results Qdrant was as fast or faster. With the denser graph at recall 0.953 it served 40,745 queries a second in the sweep and 50,845 in a second pass, against the engine’s 41,196 at 0.989. At recall 0.90 it served 49,127, more than the engine at any setting I served.
  • The lead grows with depth. Against the faster Qdrant at recall 0.95 the engine served 1.6 times as many queries at K = 100, 5.1 times at K = 1,000 and 10.4 times at K = 5,000.
  • The lead grows with recall. At 0.98, which only the denser graph reached, the engine served 4.4 times Qdrant’s throughput at K = 10 and 12.1 times at K = 5,000.
  • Qdrant’s throughput with many clients varied. With its default graph at K = 100 it answered 10,217 queries a second with 44 clients and 4,140 with 176. The denser graph slowed past 44 clients at K = 10 in the sweep and not in the second pass.
  • At depth Qdrant spent ten times the CPU per query. At K = 5,000 with 44 clients it used 36.9 ms a query against the engine’s 3.7 ms, at recall 0.965 and 0.971, and its p99 was 46.8 ms against 7.6 ms. Its JSON response was 250,622 bytes against 96,226.
  • Part of that gap is how I configured Qdrant. I capped its segments at 40,000,000 points so a rebuild fit on tmpfs, so it searched three segments, each with ef_search of at least K. My HNSW with the same graph settings used 6.5 ms a query at ef_search = 5,000. I did not test one segment or Qdrant’s gRPC API.
  • The HTTP path cost the engine little. At K = 10 it served 41,196 queries a second against 43,265 in process. Binary responses served 7% more than JSON at K = 5,000.
  • Memory differed by what each holds. Qdrant’s heap was 21.9 GB and its mapped storage 57.6 GB. The engine’s heap was 65.8 GB, and it also mapped the 51.2 GB corpus it built from, which a replica loading a snapshot does not need.

Loading 100,000,000 points into Qdrant over its HTTP API took 25 minutes, from a Python client on four cores.

Indexing them one segment at a time, the workaround under what I got wrong, took about 18 more with the default graph and 26.5 with the denser one. These times measure my setup more than Qdrant. The engine built from the mapped corpus in 12.7 minutes.

Byte codes need a second pass

Every index that scores codes alone stops short of full recall, and where it stops depends on K. The exact SQ8 scan has the same ceiling, so the index structure is not the cause.

The true neighbors are closer together than the code can resolve

SQ8 stores each dimension as one of 256 levels between that dimension’s calibrated minimum and maximum. I measured what that does to a score on the true top 100 of all 3,000 item queries. The median score moved by 0.00050, and one in ten moved by more than 0.0012.

The catalog is dense near a typical item query. The ten true neighbors of a median query span 0.0091 of score, and the gap between the tenth and the eleventh is 0.00030. A code error larger than the gap can swap neighbors across the boundary, and the exact SQ8 scan returns 0.890 of the true ten.

K Median gap at the K-th score Answer within one code error of it Exact SQ8 scan recall
10 0.00030 20% 0.890
100 0.000051 7.0% 0.943
1,000 0.000010 3.1% 0.973
5,000 0.0000034 1.8% 0.984

The gap shrinks with K and the ceiling still rises. A code error can only swap a neighbor that sits within about one error of the K-th score. For a median query that band holds 20% of the true ten and 1.8% of the true 5,000.

0:00.0 / 0:26.0
A code error only matters for neighbors that sit closer than one error to the K-th score, and a deeper answer has fewer of them. Scores are from query 1110, whose gap at K = 10 is the median, scanned in full. The shares are medians over all 3,000 item queries.
Show data
True rankfp32 scoreSQ8 scoreRank by SQ8
10.990450.990721
20.978020.979842
30.976820.976514
40.976140.976683
50.973880.975985
60.973840.974256
70.972060.973497
80.969120.970008
90.969070.969259
100.968990.9688811falls out
110.968700.9689310gets in
120.968330.9685012
130.967840.9676714
140.967550.9684213
150.967310.9671515
160.967090.9664316
170.965490.9657917
180.963220.9628818
190.962780.9626719
200.962110.9623720
210.962090.9611025
220.961320.9621221
230.961140.9613324
240.960610.9615422

A shortlist rescored in fp32 removes the ceiling

The fix is a second pass. Scan the codes, keep a shortlist of rerank_n = max(2K, 200) candidates, rescore those from full vectors, and return the best K.

On the same 16,384 cells with 8 opened, the rerank lifted recall at K = 10 from 0.887 to 0.994 and cost 3% of the throughput. IVF over fp32 needs the same 8 cells for 0.995, and the codes answered 2.9 times as many queries because they read a quarter of the bytes.

Deeper requests pay more for the second pass. At K = 5,000 the shortlist is 10,000 vectors, 5.1 MB of random reads per query.

With 32 cells opened the rerank lifted recall from 0.982 to 0.996 and took 27% of the throughput. It still answered 2.3 times the queries of IVF over fp32 on the same 32 cells, which reached 0.997.

Smaller codes lose at depth

I built the same 16,384 plain k-means cells with five codes and scanned each the same way. The two codes smaller than SQ8 rescore a shortlist from a larger copy. Their shortlists held at least 200 candidates and up to eight times K.

Code Bytes per vector Best recall, K = 10 Best recall, K = 5,000 QPS at 0.95, K = 5,000
SQ8 128 0.890 0.984 25,267
LVQ8 132 0.923 0.989 18,827
TQ8 128 0.687 0.938 never reached
PQ, SQ8 rescore 32 + 128 0.579 0.960 6,061
RaBitQ, 4-bit rescore 20 + 70 0.570 0.947 never reached
  • LVQ8 gives every vector its own range. That raised the ceiling to 0.923 at K = 10 and cost a quarter of the throughput. It is the one code here that beat SQ8 on recall.
  • TQ8 rotates the space before it quantizes. On this catalog it lost recall everywhere, and its build took 915 s against SQ8’s 187.
  • PQ and RaBitQ need shortlists too long to rescore at depth. At K = 5,000 even 40,000 rescored candidates left RaBitQ at 0.947. At K = 10, with 200 candidates rescored, they returned little more than half the true ten.

Better cells scan fewer vectors

  • Anisotropic k-means evens the lists out. Plain k-means left its largest list at 160,573 vectors, 26 times the average. Trained with the anisotropic loss the largest was 35,422. At K = 5,000 with 16 cells opened, the even lists scanned 20% fewer vectors for the same 0.974 recall.
  • More cells helped less than the codes did. With the rerank at recall 0.99, 65,536 cells answered 1.12 times the queries of 16,384 at K = 5,000 and 1.25 times at K = 1,000, and matched them at K = 100. They took 3.7 times as long to build.

How the engine works

The engine is Rust with no dependencies outside the standard library, and one binary is both the index builder and the HTTP server.

The build lays each cell out as one run of memory

Building the index is four passes, each spread over the 44 cores.

  1. Train the cells. k-means on a random sample of 1,000,000 vectors finds 65,536 centroids. The loss is the anisotropic one from ScaNN, which counts error along a vector four times as heavily as error across it.
  2. Assign every vector. Each of the 100,000,000 goes to the centroid with the highest dot product. This pass is most of the build, 658 of its 762 seconds.
  3. Calibrate the code. SQ8 takes each dimension’s range from a strided sample of 50,000 vectors. 0.0041% of all codes fall outside it and clip.
  4. Write the lists. The builder writes vectors in cell order into three aligned arrays, SQ8 codes at 128 bytes, fp32 vectors at 512 and ids at 8. A cell is one contiguous run in each.

The builder stores the centroids as int8 as well. The table is 8.4 MB, small enough to stay in the 80 MiB L3 cache.

0:00.0 / 0:25.0
A query reads its opened cells' codes front to back and touches fp32 only for its shortlist, at scattered offsets. At K = 5,000 it opens 24 cells, scores 42,834 codes and rescores 10,000 candidates, which is 5.48 MB of codes and 5.12 MB of fp32. I drew 48 cells for the index's 65,536, and open 6 for a query's 24. The query and each bar use the first measured setting to reach recall 0.95 at that depth.
Show data
KSQ8 MB scannedfp32 MB rescoredSingle-thread p50, ms
101.950.101.01
1001.950.101.01
1,0003.751.021.51
5,0005.485.122.79

A query is one pass over a few cells

One thread answers one query, and a query makes four steps.

  1. Route. The worker quantizes the query to int8, scores it against all 65,536 centroids with the Arm sdot instruction, 16 multiply-adds at a time, and keeps the best nprobe cells.
  2. Scan. The worker folds each dimension’s SQ8 scale into the query’s weights once, so a code costs one widen and one fused multiply-add. The kernel scores four vectors per pass and reuses every weight it loads across all four.
  3. Shortlist. Each score is packed with the vector’s position into one 64-bit key. A buffer keeps the best rerank_n, is cut back with a partial sort when it fills, and rejects any later key below the cut with one comparison.
  4. Rerank. The shortlist is rescored from the fp32 array and the best K return. These are the only random reads a query makes, 512 bytes per candidate.

The HTTP server is part of the same binary. Connection threads read requests into a bounded queue, and a fixed pool of worker threads runs the searches. When the queue is full the server answers 503 at once instead of letting latency pile up behind it.

What it costs to hold, query and build

0:00.0 / 0:19.0
The engine spends the least CPU per query at recall 0.99 and pays for it in memory, mostly the fp32 copy. The exact scans are left out, at more than a second of CPU per query each. Memory is each index's structures, sized from its build. CPU time is process CPU over the closed-loop window divided by the queries it completed, at each index's first measured setting above recall 0.99.
Show data
ApproachMemory, GBCPU ms per query at recall 0.99, K = 5,000Build, minutes
IVF52.510.153.3
IVF, SQ814.2·12.6
IVF, SQ8 + rerank65.43.9412.7
HNSW60.59.3520.4
HNSW, SQ822.1·20.4
HNSW, SQ8 + rerank73.311.0120.4
  • Memory is mostly the fp32 copy. The engine holds 65.4 GB, and 51.2 GB of that is the fp32 array the rerank reads. HNSW over fp32 holds 60.5 GB, 8.5 GB of it graph links. IVF over SQ8 holds 14.2 GB in all.
  • The engine spends less CPU per query. At the first measured setting above recall 0.99 for K = 5,000, a query cost the engine 3.9 ms of CPU and HNSW 9.4 ms. Both kept all 44 cores busy, so CPU per query is what set their throughput.
  • The build is mostly assignment. The engine built in 12.7 minutes on 44 cores. HNSW took 20.4, because it inserts each vector with a search of its own.

The pieces come from FAISS and ScaNN

An inverted file over scalar-quantized codes with an exact rerank of a shortlist is the design of FAISS’s IndexIVFScalarQuantizer wrapped in IndexRefineFlat, described in the Faiss library paper. The loss that trains the cells is the anisotropic quantization loss from ScaNN.

  • What I changed is tuning for depth. The shortlist keeps max(2K, 200) candidates, a floor that matters at shallow K. The centroids are scored as int8, 16 multiply-adds an instruction, and the shortlist is a buffer of packed 64-bit keys cut back with a partial sort.
  • Graph indexes take the other road. HNSW and DiskANN walk a neighbor graph, and SPANN keeps inverted lists on disk with balanced clustering. The graph results in this post come from my own HNSW.
  • Published comparisons stop at shallow depth. The big-ann-benchmarks competitions scored recall at K = 10. Depth changes which design is fastest, which is the result this post is about.

The proposed service is a fleet of identical replicas

At 100,000,000 vectors the whole index fits in one machine’s memory, so the service needs no sharding. Every replica holds a full copy, any replica can answer any query, and capacity should grow by adding copies. Of this design I measured the build, one replica’s capacity, and the load of a smaller SQ8 snapshot.

0:00.0 / 0:46.0
Queries reach a replica from the balancer on its left, and snapshots, new items and version changes come through one bus on its right. A query cost 4.4 ms of CPU behind HTTP, and a build took 12.7 minutes. Run at 70% of the rate one kept up with, 3 engine replicas at recall 0.99 carry 20,000 queries a second at K = 5,000, and Qdrant needs 25 at 0.95. I measured these numbers on the 100,000,000-vector catalog on one machine, the replica rates with requests arriving open loop, and the fleet sizes follow from them.

A query reads one replica

The balancer keeps no state, because queries are independent and replicas are identical, so it can send each query to any healthy replica. There is no scatter and no merge at this size. The balancer is designed and not built.

Inside a replica, connection threads read requests into a queue of 4,096 slots, and 88 worker threads take them one query each. When the queue is full the server answers 503 at once, so a caller can retry on another replica instead of waiting. No test filled the queue, so that path is untested.

A worker then routes, scans, shortlists and reranks as the previous section describes. At K = 5,000 with 48 cells opened, a query scanned 82,473 codes, 10.6 MB, reranked 10,000 fp32 vectors, 5.1 MB, and cost 4.4 ms of CPU behind HTTP, 3.9 ms in process. The response was 96,226 bytes of JSON.

A build produces a versioned snapshot

  • The builder is one job. It reads an export of the catalog’s embeddings, trains the cells, assigns every vector and writes the lists, 12.7 minutes on 44 cores.
  • A validator gates the release. It runs held-out queries against their exact truth, computed from the same export, and releases the snapshot only if recall matches the last one. This step is designed and not built.
  • The store keeps every version. The index is 65.4 GB in memory, and a snapshot would be about that size. The store is designed and not built.

A rollout swaps snapshots in place

A replica’s index takes 65.4 GB of the machine’s 188 GB, so a replica can load the new version beside the old one and swap them without leaving the balancer. Replicas swap one at a time.

The loader reads every section into memory and verifies a checksum on each. A 14.0 GB snapshot of an SQ8 index on 16,384 cells had answered by the second health check, 2.0 s after the process started, so it loaded from tmpfs at 6.9 GB/s or faster. Fetching from the store is not included.

At that rate the full 65.4 GB would take under 10 s, which I estimated and did not measure.

The registry that tells replicas which version to load, the in-place swap and the rollback are designed and not built. Rolling back is pointing the registry at the previous version.

New items go to a delta

A new item goes to the cell whose centroid is nearest, into a small delta list beside that cell’s main list. A query scans the delta lists of the cells it opens, so the item is searchable at once. A delete is a tombstone the shortlist checks, and the next build folds both into the lists.

The delta costs little. With a million new items spread like the catalog, a query scans about 820 more vectors, 1% of the 82,473 it already scans, an estimate I did not measure. The change log and the delta are designed and not built.

A failed replica drops out on its own

The balancer checks every replica’s health and stops sending queries to one that does not answer. A replacement loads the current snapshot from the store and rejoins, the same path as a rollout. Of this, the bounded queue and its 503 are built, though no test filled the queue. The health checks and the replacement are designed.

How many replicas a load needs

A replica’s capacity is the highest arrival rate it keeps up with, not the peak a closed loop reaches. I drove both servers open loop, with requests arriving on a random schedule over up to 512 connections, whether or not earlier ones had returned.

Each request was timed from its scheduled arrival. A server that falls behind shows it as requests the load generator could not send, because every connection was waiting.

0:00.0 / 0:19.0
A server's capacity is the highest arrival rate it keeps up with, and latency turns up sharply just past it. The engine runs its fastest setting that reaches recall 0.99, the one the fleet is sized on, and Qdrant the one setting I drove open loop, recall 0.953 at K = 10 and 0.979 at K = 5,000. Arrivals follow a Poisson schedule from a quarter of the closed-loop peak to past it, for 20 seconds at each rate, and a rate counts as sustained when every request started inside the window, 99.9% finished in it, and none failed.
Show data
ServerKOffered per secondCompleted per secondp50 msp99 msNever started
Engine, recall 0.994108,2518,2771.381.670
Engine, recall 0.9941016,50216,5081.391.680
Engine, recall 0.9941023,10323,1101.402.610
Engine, recall 0.9941026,40426,3931.453.900
Engine, recall 0.9941029,70429,6932.115.730
Engine, recall 0.9941033,00532,93335.3657.251,269
Engine, recall 0.9941036,30532,4531230.362115.3777,043
Qdrant, recall 0.9531012,71112,7240.541.010
Qdrant, recall 0.9531025,42325,4190.581.280
Qdrant, recall 0.9531035,59212,2931.2312769.51465,681
Qdrant, recall 0.9531040,6761,49617597.3519326.50782,817
Qdrant, recall 0.9531045,76194318434.6119699.89895,548
Qdrant, recall 0.9531050,84524519689.7619992.781,010,816
Qdrant, recall 0.9531055,9300··1,117,495
Engine, recall 0.9925,0002,5142,4974.044.700
Engine, recall 0.9925,0005,0274,9994.134.810
Engine, recall 0.9925,0007,0387,0174.245.450
Engine, recall 0.9925,0008,0438,0114.357.790
Engine, recall 0.9925,0009,0499,0185.0111.710
Engine, recall 0.9925,00010,05410,02616.9652.730
Engine, recall 0.9925,00011,0609,9261167.192045.2422,230
Qdrant, recall 0.9795,00029029319.8823.720
Qdrant, recall 0.9795,00058157319.9923.950
Qdrant, recall 0.9795,00081381020.2728.050
Qdrant, recall 0.9795,00092992620.8840.430
Qdrant, recall 0.9795,0001,0451,04323.7563.060
Qdrant, recall 0.9795,0001,1611,15788.62175.120
Qdrant, recall 0.9795,0001,2781,1661164.022087.502,170

An engine replica keeps up until its cores are full, then falls behind within one step. At K = 5,000 and recall 0.99 one engine replica kept up with 10,054 queries a second, with all 44 cores busy and p99 at 52.7 ms. At 1.1 times that rate it left 22,230 requests unstarted in 20 seconds.

I size each fleet at 70% of the rate one replica kept up with, the same share for both servers. At that rate the engine’s p99 was 5.5 ms at K = 5,000.

Replicas for 20,000 queries a second, each run at 70% of the rate it kept up with
KRecallServerKept up with /sPlanned per replica /sp99 there, msReplicas$ per hour$ per million
100.95Engine37,05925,9411.41$2.16$0.023
100.95Qdrant25,42317,7961.02$4.31$0.034
100.99Engine29,70420,7931.71$2.16$0.029
100.99Qdrantnever sustained·····
1000.95Engine36,66125,6621.41$2.16$0.023
1000.95Qdrant20,21114,1481.42$4.31$0.042
1000.99Engine24,68417,2782.02$4.31$0.035
1000.99Qdrantnever sustained·····
1,0000.95Engine25,74118,0193.12$4.31$0.033
1,0000.95Qdrant3,9762,7836.08$17.24$0.215
1,0000.99Engine22,21115,5483.32$4.31$0.039
1,0000.99Qdrantnever sustained·····
5,0000.95Engine12,2428,5694.83$6.47$0.070
5,0000.95Qdrant1,16181328.125$53.88$0.736
5,0000.99Engine10,0547,0385.53$6.47$0.085
5,0000.99Qdrantnever sustained·····
  • At depth one engine replica does the work of more than ten Qdrant replicas. At K = 5,000 the engine kept up with 12,242 queries a second at recall 0.971 and Qdrant with 1,161 at 0.979, since Qdrant cannot search below ef_search = K. For 20,000 a second that takes 3 engine replicas or 25 Qdrant replicas.
  • At ten results the fleets are close. One engine replica or two Qdrant replicas carry 20,000 queries a second at recall 0.95. At recall 0.99 the engine needs one replica at K = 10 and three at K = 5,000, and Qdrant reached 0.99 at no depth.
  • Qdrant’s shallow limits look like stalls, not saturation. At K = 10 it kept up at half its peak and fell behind at 70%, with 19 of 44 cores busy, a median of 1.2 ms and a p95 of 11.7 s. At K = 1,000 it fell behind at its peak rate and kept up again at 1.1 times it.
  • I did not diagnose the stalls. With 176 clients the K = 10 setting answered 6,782 queries a second in one run and 50,845 in the next. I ran Qdrant’s default service settings and did not tune its threads, so its fleets at K = 10 to 1,000 rest on stalls I cannot explain.
  • At depth Qdrant’s limit was its cores. At K = 5,000 it fell behind with every core busy.
  • The price is a list price. Each replica is one c4a-standard-48 at $2.1552 an hour on demand in us-central1, from cloudprice.net. A discount lowers both fleets alike and leaves the ratio where it is.

Each design decision had a test

I wrote each design decision down as a hypothesis and tested it. Two of them came after a result surprised me, the cache sharing in the exact scan and Qdrant’s graph.

Hypothesis Test What I measured Verdict
Depth decides the index Every index at K = 10, 100, 1,000 and 5,000 HNSW fastest at K = 10 and recall 0.95, the engine 1.9 times HNSW at K = 5,000 and 0.99 Held
SQ8’s ceiling comes from the data The share of each true answer within one code error of its K-th score 20% at K = 10 and 1.8% at K = 5,000, tracking a ceiling of 0.890 and 0.984 Held
An fp32 rerank lifts it cheaply The same cells with and without the rerank 0.887 to 0.994 for 3% of throughput at K = 10, and 27% at K = 5,000 Held, and costs more at depth
Smaller codes win at depth Five codes on the same cells PQ and RaBitQ never matched SQ8’s recall or throughput Failed
Anisotropic cells scan fewer vectors Plain against anisotropic k-means, same cells opened 20% fewer vectors for the same recall Held
More cells are faster 16,384 against 65,536 cells, both with the rerank 1.12 times the throughput at K = 5,000, for 3.7 times the build Barely held
Concurrent exact scans share cache lines The same scan at 1 to 44 threads, from the start and from a per-query offset 17.6 queries a second in step and 10.3 started apart, and a read test at 969 GB/s on the same bytes against 360 GB/s with each thread on its own part Held
HTTP costs the engine little One setting in process and served 43,265 and 41,196 queries a second at K = 10 Held
Qdrant’s ceiling is its default graph Qdrant rebuilt with ef_construct = 200 and swept to ef_search = 2,048 at K = 10 and 40,000 at K = 5,000 At ef_search = 512 recall at K = 10 rose from 0.954 to 0.977, and the best was 0.983 at K = 10 and 0.982 at K = 5,000 Partly held, recall rose and stayed below 0.99 in the range swept
JSON costs throughput at depth JSON against binary responses Binary served 7% more at K = 5,000 Held, and small

How I checked the numbers

  • The truth was checked twice. An exact fp32 scan produced the true neighbors, and an independent float64 scan agreed on all 5,000 neighbors of five queries. A second round of runs a day later recomputed the truth for 100 queries, and it matched the first byte for byte.
  • Served recall matched in-process recall at the setting I compared. At K = 10 with 8 cells opened, recall parsed from HTTP responses was 0.9887, the same as in process.
  • A rerun a day later matched. Behind HTTP the engine peaked at 41,177 queries a second at K = 10 with 8 cells, against 41,196 the day before.
  • Repeated settings agree. At K = 10 several shortlist sizes round up to the same 200 candidates, so 34 settings ran two or three times each. Throughput differed by at most 0.5%, with a median of 0.04%, and recall was identical every time.
  • Ties do not move the answer. Counting any result within 1e-6 of the K-th true score changed no recall by more than 0.002.
  • The prose is recomputed. The site’s tests read the committed result files and fail if a pinned number drifts from them.

What I got wrong

  • The first exact-scan run undercounted. Its load window dropped queries that straddled either edge, and at 2.2 s a query that hid 16% of the throughput, 14.7 against 17.6 queries a second. I fixed the window in both load generators and ran it again.
  • Qdrant’s first index build failed. It needs about twice a segment’s size free to rebuild it, and the tmpfs could not hold that beside the collection. The data section describes how I rebuilt one segment at a time.
  • An earlier version of this post rested on a smaller study. It timed one engine in process and Qdrant through a client, on a sample of the catalog. Every number here is new.

A public dataset shows the same crossover

Every number above is on a catalog nobody else can download. So I ran the in-process comparison again on DEEP-100M, the first 100,000,000 vectors of the public DEEP-1B set, with its 10,000 queries. My exact ground truth matched the official one on 99.995% of the top 100 neighbors.

  • The order still reverses with depth. At recall 0.95 my HNSW answered 2.0 times the engine’s queries at K = 10, and the engine answered 2.1 times HNSW’s at K = 5,000. At K = 1,000, where the two were within 5% on the catalog, the engine led by 1.3 times.
  • The lead at the deep end matched. At K = 5,000 and recall 0.99 the engine answered 1.9 times HNSW’s queries on DEEP, the same ratio as on the catalog.
  • Each query reads far more of this dataset. On the catalog, recall 0.99 at K = 5,000 took 48 cells, about 82,000 vectors. On DEEP, 512 cells and about a million vectors reached 0.970, and 0.99 took between 1,024 and 1,536 cells. There the engine answered 1,366 queries a second, an eighth of its catalog rate.
  • The same design runs slower in the library. FAISS 1.10.0 searched IVF65536,SQ8 with a flat refine at the engine’s cell count and rerank depth. It answered 2.4 to 2.6 times fewer queries at every depth and recall both reached.
  • The anisotropic cells did not help here. FAISS trained plain k-means on four times the sample, and its cells found slightly more neighbors each, up to 0.017 of recall at 8 cells.
  • Behind their APIs the lead shrank. I served Qdrant in two segments over gRPC. At K = 5,000 and recall 0.95 the engine served 4.4 times its peak, against 10.4 on the catalog, and at 0.99, which Qdrant never reached on the catalog, 1.9 times. At K = 10 Qdrant served up to 2.1 times the engine’s.
DEEP-100M in process: queries a second at each recall on the same 44 cores, interpolated between measured settings
KRecallEngineEngine, full precisionHNSWFAISSEngine ÷ fastest other
100.9514,9405,75029,9146,0770.5×
1000.9510,4423,73214,2224,2130.7×
1,0000.956,3102,1605,0172,4741.3×
5,0000.953,6331,3231,7211,3942.1×
100.995,0571,6407,5122,0200.7×
1000.993,2311,084tops out at 0.9881,320·
1,0000.992,1156541,4948151.4×
5,0000.991,3664317045221.9×

Tuning for public data made the engine a hybrid

At full precision, with no byte codes, the engine needed more machines than the incumbent in 14 of the 16 depths and recalls I sized across both public datasets. Its scan already read memory at 340 to 365 GB/s, the machine’s limit, so it could only get faster by reading less.

I changed one thing at a time, at full precision and in process, on Cohere 10M and on DEEP-10M, the first 10,000,000 vectors of DEEP-100M.

  • More training changed nothing. Twenty k-means iterations instead of four moved throughput by under 4% at every depth and recall on both datasets.
  • Filing by dot product lopsides the cells. Plain k-means that filed each vector by its highest dot product left one Cohere cell with 442,026 vectors, where the median cell held 196. Filing and routing by distance kept the largest at 4,087 and ran 11% faster at K = 10 and recall 0.95.
  • More cells helped the cells most. Four times as many, 65,536 for 10,000,000 vectors, doubled throughput at K = 10 and recall 0.95 on Cohere and raised it 1.3 times on DEEP-10M.
  • Spilling helped in one place. Storing each vector in a second cell ran 18% faster on Cohere at K = 10, and about half as fast on DEEP-10M.
  • A graph with more links beat every cell layout on Cohere. At recall 0.99 a graph with 48 links a node answered 9,481 queries a second at K = 10, 16 times the best cells, and 3.8 times them at K = 5,000. With 16 links, built on 44 threads, it topped out at 0.985.
  • On DEEP-10M the cells still won at depth. At K = 5,000 and recall 0.95 the best cells answered 5,595 queries a second to the best graph’s 2,557, and at 0.99 the two were within 7%.

So the engine’s full-precision default is now a hybrid: a graph with 32 links a node for all but the deepest queries, and 65,536 cells beside it for those. 32 links kept most of 48’s gain and built in two thirds of the time.

Cohere 10M: queries a second in process at recall 0.99, each variant changing one thing from the row above it within its path. A variant that tops out stopped short at the widest setting I swept
PathVariantK = 10K = 1,000K = 5,000
Cellsthe campaign: 16,384 cells, 4 anisotropic iterations on 1M rows, filed by dot3149660
Cells20 iterations3199962
Cellsplain k-means on 64 rows a cell976049
Cellsfiled and routed by distance37111770
Cellseach vector also in a second cell44211256
Cells65,536 cells, 10 iterations on 2M rows576tops out at 0.982tops out at 0.954
Cells65,536 cells, 4 anisotropic iterations on 1M rows3969663
Cellsthe same, filed and routed by distance51613984
GraphM = 16, built on 44 threadstops out at 0.984tops out at 0.986tops out at 0.985
GraphM = 16, built on 16 threadstops out at 0.987484197
GraphM = 32, ef_construct 4007,759775305
GraphM = 48, ef_construct 5009,481824323
DEEP-10M: queries a second in process at recall 0.95, each variant changing one thing from the row above it within its path. A variant that tops out stopped short at the widest setting I swept
PathVariantK = 10K = 1,000K = 5,000
Cellsthe campaign: 16,384 cells, 4 anisotropic iterations on 1M rows, filed by dot24,9038,1394,668
Cells20 iterations25,8448,3374,754
Cellsplain k-means on 64 rows a cell9,4374,2372,786
Cellsfiled and routed by distance24,7737,8014,313
Cellseach vector also in a second cell13,2174,3242,262
Cells65,536 cells, 10 iterations on 2M rows32,84710,7565,595
Cells65,536 cells, 4 anisotropic iterations on 1M rows31,71610,4565,583
Cellsthe same, filed and routed by distance28,6209,3445,057
GraphM = 16, built on 16 threads75,88610,1312,557
GraphM = 32, ef_construct 40085,7417,1561,870
GraphM = 48, ef_construct 50085,5596,0421,616

What this does not show

  • Two datasets, and no text embeddings. The catalog and DEEP-100M are both item or image vectors. The code ceilings and the cells a query must open come from how densely neighbors pack around a query, and a text embedding model packs them differently.
  • No filters and no writes. Every query searched the whole catalog, and nothing changed while it served. Qdrant does both today. The engine does neither yet.
  • One machine, on loopback. There were no replicas, no network hop and no failover. The fleet sizes multiply one replica’s measured rate, and the load generator shared the machine on cores of its own.
  • Few graph configurations. My HNSW ran at M = 16 and ef_construct = 200. I measured Qdrant at its defaults and at ef_construct = 200, both with M = 16. A larger M may raise both ceilings, at a cost in memory and build time.
  • Qdrant as I configured it. Three segments set by my tmpfs limit, the REST API and not gRPC, default threads, and open-loop stalls I did not diagnose. One segment may change both its CPU per query and its recall.
  • No saved snapshot of the proposed index, and no full queue. I loaded a smaller SQ8 snapshot, and no run filled the engine’s queue.
  • One load generator. Every open-loop rate came from one generator on two cores holding 512 connections. A fleet behind a real balancer adds that balancer’s own queueing, which none of this measures.
  • No hardware counters. The VM exposes none, so the cache sharing in the exact scan rests on bytes, time and the offset test, not on measured misses.

The data

Every table here renders from the committed result files under benchmark/vector-search/results/2026-09-25-100m/, and the tests recompute every number the story quotes from the same files.

How it was measured
Part What I did
Corpus 100,000,000 of the 104,998,168 live catalog vectors, drawn with a fixed seed and stored in random order
Vectors 128-d fp32, unit length, dot product
Item queries 3,000 drawn from the 4,998,168 live vectors left out of the corpus
Text queries 1,000 distinct text-query embeddings, a second check on every recall
Truth An exact fp32 scan at every K, checked against an independent float64 scan on five queries
Recall Set overlap at K, mean over three splits of 1,000, with the worst split, p10 and a 95% interval
Ties A tie-aware recall counts any result scoring within 1e-6 of the K-th true score. It never differed from plain recall by more than 0.002
In process Each configuration in its own process on cores 0 to 43, 44 threads, closed loop, 3 s warm-up and a 15 s window
Single thread Up to 1,000 queries one at a time, stopping after 20 s per setting
Served Server on cores 0 to 43, load generator on cores 44 and 45, 1, 11, 44, 88 and 176 keep-alive clients
Resources CPU from getrusage and /proc, memory from /proc split into heap, file and shared, and a sampler at 1 Hz on core 46
Bandwidth A 44-thread streaming read of 16 GB before every in-process configuration
Qdrant 1.19.0, one collection, dot product, M = 16, ef_construct = 100, three segments of at most 40,000,000 points, fp32 vectors memory-mapped from tmpfs, int8 copy held in RAM, one optimization thread
Qdrant build Points uploaded with indexing off, then indexed one segment at a time. A rebuild needs about twice a segment’s size free, so each unindexed segment waited on a second tmpfs while another was rebuilt. Every finished segment sits on the first
Throughput at recall 0.95 and 0.99
At recall 0.95
ApproachK = 10K = 100K = 1,000K = 5,000
exact scan17.617.617.617.6
exact scan, SQ8tops out at 0.890tops out at 0.94326.426.4
IVF12,31512,31812,24912,030
IVF, SQ8tops out at 0.890tops out at 0.94336,64927,734
IVF, SQ8 + rerank43,26543,10728,77813,544
HNSW268,245160,01026,5916,722
HNSW, SQ8tops out at 0.885tops out at 0.93538,3029,398
HNSW, SQ8 + rerank233,464119,24517,5393,997
At recall 0.99
ApproachK = 10K = 100K = 1,000K = 5,000
exact scan17.617.617.617.6
IVF12,31512,3188,5705,437
IVF, SQ8 + rerank40,97334,12624,61311,428
HNSWtops out at 0.98933,29320,1156,122
HNSW, SQ8 + reranktops out at 0.970tops out at 0.98617,5393,997

Queries per second on 44 cores, in process, interpolated between the two measured settings on either side of the recall. A cell that never reached it gives the highest recall measured instead.

Every in-process measurement
ApproachKSettingRecallWorst split±95%Text recall1-thread p50 msQPSp50 msp99 msCPU ms/q
exact scan10all0.99810.99700.00120.99992,199.68182,367.292,373.392,499.819
exact scan100all0.99980.99970.00011.00002,209.58182,368.822,398.662,499.821
exact scan1,000all1.00001.00000.00001.00002,220.83182,418.042,420.492,499.819
exact scan5,000all1.00001.00000.00001.00002,225.67182,388.182,389.422,499.983
exact scan, SQ810all0.89030.88950.00490.95411,776.57261,733.981,777.331,666.549
exact scan, SQ8100all0.94340.94250.00250.96991,776.46261,733.161,783.121,666.550
exact scan, SQ81,000all0.97300.97220.00120.98071,771.39261,733.691,768.781,666.549
exact scan, SQ85,000all0.98420.98400.00070.98691,772.42261,734.981,780.841,666.550
IVF10nprobe 80.99470.99280.00170.92171.3812,3153.317.853.573
IVF10nprobe 160.99710.99540.00140.96542.526,4326.5113.256.840
IVF10nprobe 240.99760.99620.00130.97863.654,3809.6618.1310.044
IVF10nprobe 320.99790.99670.00120.98514.683,32512.8622.4813.230
IVF10nprobe 480.99800.99690.00120.99016.862,24419.2031.1919.610
IVF10nprobe 640.99810.99700.00120.99238.981,69825.5339.3525.916
IVF10nprobe 960.99810.99700.00120.996213.351,13938.0955.5038.621
IVF10nprobe 1280.99810.99700.00120.997717.8685850.7271.0151.254
IVF10nprobe 1920.99810.99700.00120.998626.7357476.09101.9676.694
IVF10nprobe 2560.99810.99700.00120.999035.28432101.25131.58101.954
IVF10nprobe 3840.99810.99700.00120.999753.36288152.14192.35152.837
IVF10nprobe 5120.99810.99700.00120.999971.28216202.49252.84203.561
IVF100nprobe 80.99360.99310.00130.91911.3912,3183.327.713.572
IVF100nprobe 160.99830.99770.00050.96082.516,4346.5313.026.838
IVF100nprobe 240.99910.99900.00030.97583.624,3819.6918.0110.043
IVF100nprobe 320.99940.99930.00020.98354.733,32712.8322.5513.224
IVF100nprobe 480.99970.99960.00010.98896.972,24419.1831.0819.612
IVF100nprobe 640.99970.99960.00010.99169.131,69825.5039.1625.911
IVF100nprobe 960.99980.99970.00010.995913.541,14038.0254.8038.582
IVF100nprobe 1280.99980.99970.00010.997217.9385850.8070.7351.294
IVF100nprobe 1920.99980.99970.00010.998426.8257276.23102.2176.863
IVF100nprobe 2560.99980.99970.00010.999135.55430101.57131.90102.255
IVF100nprobe 3840.99980.99970.00010.999553.43288152.07193.25152.801
IVF100nprobe 5120.99980.99970.00010.999770.12216203.00251.98203.437
IVF1,000nprobe 80.98350.98290.00180.90741.4412,2493.367.473.592
IVF1,000nprobe 160.99530.99480.00080.95632.586,4116.5712.936.864
IVF1,000nprobe 240.99770.99750.00050.97363.744,3679.7417.7610.076
IVF1,000nprobe 320.99860.99830.00040.98234.753,32112.9022.4513.249
IVF1,000nprobe 480.99940.99920.00020.98916.922,24219.2131.0719.624
IVF1,000nprobe 640.99970.99960.00010.99239.051,69725.5039.0725.929
IVF1,000nprobe 960.99990.99980.00010.996013.341,13938.1555.6338.637
IVF1,000nprobe 1280.99990.99990.00010.997417.7485750.8070.7951.342
IVF1,000nprobe 1920.99990.99990.00000.998526.7257575.96101.3676.542
IVF1,000nprobe 2561.00001.00000.00000.999035.11432101.23133.09101.923
IVF1,000nprobe 3841.00001.00000.00000.999453.02286152.97192.41153.619
IVF1,000nprobe 5121.00001.00000.00000.999670.15216203.16253.44203.562
IVF5,000nprobe 80.95540.95290.00280.87191.5912,0303.496.913.657
IVF5,000nprobe 160.98720.98620.00130.94182.726,3456.6912.506.934
IVF5,000nprobe 240.99420.99380.00080.96513.844,3379.8417.3410.146
IVF5,000nprobe 320.99650.99610.00060.97664.923,30412.9722.0113.317
IVF5,000nprobe 480.99840.99830.00030.98577.112,23319.3230.8819.701
IVF5,000nprobe 640.99910.99900.00020.99019.231,69325.5938.8825.996
IVF5,000nprobe 960.99950.99950.00010.994413.561,13738.2555.0938.695
IVF5,000nprobe 1280.99970.99960.00010.996418.0585650.8670.3551.398
IVF5,000nprobe 1920.99980.99980.00010.997926.9257475.82101.1376.605
IVF5,000nprobe 2560.99990.99980.00010.998535.52432101.48130.07101.907
IVF5,000nprobe 3840.99990.99990.00010.999153.85288151.98191.75152.730
IVF5,000nprobe 5121.00000.99990.00000.999470.31216202.22254.25203.374
IVF, SQ810nprobe 80.88300.88190.00500.83840.9944,6760.981.200.985
IVF, SQ810nprobe 160.88750.88680.00490.89781.2535,1981.251.531.250
IVF, SQ810nprobe 240.88850.88790.00490.91471.5029,3141.501.861.501
IVF, SQ810nprobe 320.88920.88880.00490.92911.7525,1111.742.171.752
IVF, SQ810nprobe 480.88980.88900.00490.93862.2419,5552.242.792.250
IVF, SQ810nprobe 640.88980.88910.00490.94222.7116,0532.733.362.741
IVF, SQ810nprobe 960.89000.88940.00490.94713.6111,8193.714.513.723
IVF, SQ810nprobe 1280.89020.88940.00490.94864.529,3694.695.624.696
IVF, SQ810nprobe 1920.89030.88950.00490.95136.346,6256.647.786.641
IVF, SQ810nprobe 2560.89030.88950.00490.95218.165,1268.599.868.583
IVF, SQ810nprobe 3840.89030.88950.00490.952811.843,52512.5114.1312.481
IVF, SQ810nprobe 5120.89030.88950.00490.953315.482,69016.3818.3316.358
IVF, SQ8100nprobe 80.92910.92810.00300.83690.9944,2360.991.210.995
IVF, SQ8100nprobe 160.93860.93740.00260.90621.2635,0651.251.541.255
IVF, SQ8100nprobe 240.94080.93920.00260.92781.5029,0831.511.881.513
IVF, SQ8100nprobe 320.94190.94050.00250.94091.7624,9781.752.181.762
IVF, SQ8100nprobe 480.94260.94120.00250.95302.2319,4772.252.802.259
IVF, SQ8100nprobe 640.94290.94180.00250.95792.7016,0052.743.372.749
IVF, SQ8100nprobe 960.94320.94210.00250.96333.6211,7953.724.523.730
IVF, SQ8100nprobe 1280.94330.94230.00250.96544.539,3494.705.634.707
IVF, SQ8100nprobe 1920.94340.94240.00250.96746.416,6146.657.796.653
IVF, SQ8100nprobe 2560.94340.94240.00250.96848.235,1218.609.878.592
IVF, SQ8100nprobe 3840.94340.94240.00250.969011.933,52312.5214.1412.488
IVF, SQ8100nprobe 5120.94340.94250.00250.969315.582,68716.4018.3416.374
IVF, SQ81,000nprobe 80.93120.92920.00330.80281.0542,5751.031.261.033
IVF, SQ81,000nprobe 160.95950.95780.00190.89821.3133,9611.291.591.296
IVF, SQ81,000nprobe 240.96650.96550.00150.92891.5628,3411.551.931.552
IVF, SQ81,000nprobe 320.96930.96830.00140.94411.8124,3561.802.241.807
IVF, SQ81,000nprobe 480.97130.97060.00130.95952.2919,0952.302.862.304
IVF, SQ81,000nprobe 640.97210.97140.00120.96652.7415,7492.793.432.794
IVF, SQ81,000nprobe 960.97260.97190.00120.97263.6711,6573.774.563.775
IVF, SQ81,000nprobe 1280.97280.97200.00120.97564.599,2594.745.694.752
IVF, SQ81,000nprobe 1920.97290.97210.00120.97806.466,5676.707.846.700
IVF, SQ81,000nprobe 2560.97290.97210.00120.97908.325,0898.659.938.645
IVF, SQ81,000nprobe 3840.97290.97220.00120.979812.003,50812.5714.1912.542
IVF, SQ81,000nprobe 5120.97300.97220.00120.980215.612,67916.4518.4016.424
IVF, SQ85,000nprobe 80.84160.83830.00520.69811.1838,3631.141.391.147
IVF, SQ85,000nprobe 160.93450.93380.00290.84641.4630,6811.431.751.434
IVF, SQ85,000nprobe 240.96060.96040.00190.89901.7225,8811.692.111.700
IVF, SQ85,000nprobe 320.97090.97080.00140.92601.9622,5031.952.431.955
IVF, SQ85,000nprobe 480.97850.97820.00100.95162.4317,8842.453.062.460
IVF, SQ85,000nprobe 640.98120.98080.00080.96312.9214,9242.943.622.948
IVF, SQ85,000nprobe 960.98300.98260.00070.97363.8211,1853.924.753.934
IVF, SQ85,000nprobe 1280.98350.98310.00070.97834.748,9564.905.894.913
IVF, SQ85,000nprobe 1920.98390.98350.00070.98236.576,4206.858.016.854
IVF, SQ85,000nprobe 2560.98400.98370.00070.98408.464,9918.8210.118.815
IVF, SQ85,000nprobe 3840.98410.98380.00070.985412.143,46212.7414.3812.711
IVF, SQ85,000nprobe 5120.98420.98380.00070.986015.772,65216.6218.5616.595
IVF, SQ8 + rerank10nprobe 8, rerank 2000.98870.98680.00220.86931.0143,2651.011.231.017
IVF, SQ8 + rerank10nprobe 16, rerank 2000.99420.99270.00170.93541.2734,4581.271.561.277
IVF, SQ8 + rerank10nprobe 24, rerank 2000.99560.99380.00150.95471.5128,7231.531.901.532
IVF, SQ8 + rerank10nprobe 32, rerank 2000.99640.99490.00140.97051.7424,6271.782.211.787
IVF, SQ8 + rerank10nprobe 48, rerank 2000.99690.99570.00140.98162.2219,3122.272.822.278
IVF, SQ8 + rerank10nprobe 64, rerank 2000.99700.99580.00130.98592.6915,9042.763.392.767
IVF, SQ8 + rerank10nprobe 96, rerank 2000.99720.99600.00130.99193.6211,7613.734.533.741
IVF, SQ8 + rerank10nprobe 128, rerank 2000.99740.99640.00130.99374.559,3464.705.634.708
IVF, SQ8 + rerank10nprobe 192, rerank 2000.99760.99660.00130.99696.416,6296.647.776.638
IVF, SQ8 + rerank10nprobe 256, rerank 2000.99760.99660.00130.99788.225,1398.579.838.561
IVF, SQ8 + rerank10nprobe 384, rerank 2000.99760.99660.00130.998511.913,53412.4814.0812.449
IVF, SQ8 + rerank10nprobe 512, rerank 2000.99760.99660.00130.999015.532,70416.2918.2216.271
IVF, SQ8 + rerank100nprobe 8, rerank 2000.97700.97630.00240.85081.0143,1071.021.241.021
IVF, SQ8 + rerank100nprobe 8, rerank 4000.98030.97980.00220.85091.0441,9591.041.271.049
IVF, SQ8 + rerank100nprobe 16, rerank 2000.98900.98860.00160.92531.2734,3551.281.561.281
IVF, SQ8 + rerank100nprobe 16, rerank 4000.99240.99210.00130.92551.2933,6061.311.601.309
IVF, SQ8 + rerank100nprobe 24, rerank 2000.99180.99100.00140.94971.5128,6521.531.901.536
IVF, SQ8 + rerank100nprobe 24, rerank 4000.99530.99480.00100.94991.5428,1171.561.941.565
IVF, SQ8 + rerank100nprobe 32, rerank 2000.99310.99260.00130.96451.7524,6411.782.211.786
IVF, SQ8 + rerank100nprobe 32, rerank 4000.99660.99630.00090.96461.7824,2381.812.241.815
IVF, SQ8 + rerank100nprobe 48, rerank 2000.99410.99360.00130.97862.2219,2942.272.822.280
IVF, SQ8 + rerank100nprobe 48, rerank 4000.99750.99730.00080.97882.2519,0302.302.862.312
IVF, SQ8 + rerank100nprobe 64, rerank 2000.99460.99430.00120.98452.7015,8722.763.402.772
IVF, SQ8 + rerank100nprobe 64, rerank 4000.99800.99800.00060.98472.7215,7152.793.432.800
IVF, SQ8 + rerank100nprobe 96, rerank 2000.99490.99470.00120.99113.6211,7503.744.533.744
IVF, SQ8 + rerank100nprobe 96, rerank 4000.99830.99830.00060.99123.6511,6553.774.563.775
IVF, SQ8 + rerank100nprobe 128, rerank 2000.99500.99490.00110.99364.559,3404.705.634.711
IVF, SQ8 + rerank100nprobe 128, rerank 4000.99850.99840.00050.99384.589,2754.745.674.744
IVF, SQ8 + rerank100nprobe 192, rerank 2000.99520.99500.00110.99636.426,6256.647.776.641
IVF, SQ8 + rerank100nprobe 192, rerank 4000.99860.99850.00050.99646.456,5916.687.816.676
IVF, SQ8 + rerank100nprobe 256, rerank 2000.99520.99500.00110.99758.255,1368.589.848.566
IVF, SQ8 + rerank100nprobe 256, rerank 4000.99860.99850.00050.99778.255,1168.619.888.600
IVF, SQ8 + rerank100nprobe 384, rerank 2000.99520.99500.00110.998411.863,54112.4614.0612.427
IVF, SQ8 + rerank100nprobe 384, rerank 4000.99870.99850.00050.998611.973,53012.4914.1012.463
IVF, SQ8 + rerank100nprobe 512, rerank 2000.99520.99500.00110.998915.622,70316.3018.2316.278
IVF, SQ8 + rerank100nprobe 512, rerank 4000.99870.99850.00050.999015.542,69616.3418.2716.318
IVF, SQ8 + rerank1,000nprobe 8, rerank 2,0000.94890.94760.00340.80711.2434,4081.271.511.279
IVF, SQ8 + rerank1,000nprobe 8, rerank 4,0000.94940.94800.00340.80711.4528,7861.521.781.529
IVF, SQ8 + rerank1,000nprobe 16, rerank 2,0000.98200.98120.00170.90621.5128,3591.551.861.552
IVF, SQ8 + rerank1,000nprobe 16, rerank 4,0000.98260.98170.00170.90621.7224,2241.812.141.816
IVF, SQ8 + rerank1,000nprobe 24, rerank 2,0000.99070.99060.00120.93921.7624,3001.812.211.811
IVF, SQ8 + rerank1,000nprobe 24, rerank 4,0000.99130.99110.00110.93921.9821,1232.082.502.083
IVF, SQ8 + rerank1,000nprobe 32, rerank 2,0000.99430.99400.00080.95622.0021,2942.062.522.066
IVF, SQ8 + rerank1,000nprobe 32, rerank 4,0000.99480.99460.00080.95622.2318,8032.332.822.340
IVF, SQ8 + rerank1,000nprobe 48, rerank 2,0000.99700.99680.00060.97362.4917,1452.563.142.566
IVF, SQ8 + rerank1,000nprobe 48, rerank 4,0000.99750.99740.00050.97362.7215,4642.843.442.845
IVF, SQ8 + rerank1,000nprobe 64, rerank 2,0000.99800.99780.00040.98182.9814,3883.053.703.058
IVF, SQ8 + rerank1,000nprobe 64, rerank 4,0000.99860.99840.00030.98183.2013,1873.324.013.337
IVF, SQ8 + rerank1,000nprobe 96, rerank 2,0000.99880.99870.00030.98913.9110,8674.044.854.049
IVF, SQ8 + rerank1,000nprobe 96, rerank 4,0000.99930.99920.00020.98924.1210,1834.315.134.321
IVF, SQ8 + rerank1,000nprobe 128, rerank 2,0000.99900.99890.00030.99284.808,7904.995.965.006
IVF, SQ8 + rerank1,000nprobe 128, rerank 4,0000.99950.99950.00020.99295.038,3045.296.285.299
IVF, SQ8 + rerank1,000nprobe 192, rerank 2,0000.99920.99910.00030.99596.666,3386.948.096.942
IVF, SQ8 + rerank1,000nprobe 192, rerank 4,0000.99970.99970.00010.99596.896,1037.218.367.209
IVF, SQ8 + rerank1,000nprobe 256, rerank 2,0000.99920.99910.00030.99748.494,9688.8610.148.855
IVF, SQ8 + rerank1,000nprobe 256, rerank 4,0000.99980.99970.00010.99748.724,8109.1610.449.147
IVF, SQ8 + rerank1,000nprobe 384, rerank 2,0000.99930.99920.00030.998612.133,46212.7314.3612.708
IVF, SQ8 + rerank1,000nprobe 384, rerank 4,0000.99980.99980.00010.998612.393,38813.0214.6612.987
IVF, SQ8 + rerank1,000nprobe 512, rerank 2,0000.99930.99920.00030.999115.802,65816.5818.4916.554
IVF, SQ8 + rerank1,000nprobe 512, rerank 4,0000.99990.99980.00010.999116.062,60616.9218.8716.886
IVF, SQ8 + rerank5,000nprobe 8, rerank 10,0000.84460.84120.00530.69872.1917,6082.502.872.499
IVF, SQ8 + rerank5,000nprobe 8, rerank 20,0000.84460.84120.00530.69872.6413,7073.194.263.210
IVF, SQ8 + rerank5,000nprobe 16, rerank 10,0000.94190.94130.00300.84862.5213,8583.173.623.175
IVF, SQ8 + rerank5,000nprobe 16, rerank 20,0000.94200.94140.00300.84863.529,2384.775.284.763
IVF, SQ8 + rerank5,000nprobe 24, rerank 10,0000.97090.97050.00200.90272.7912,7593.443.963.448
IVF, SQ8 + rerank5,000nprobe 24, rerank 20,0000.97100.97060.00200.90273.848,5555.145.715.143
IVF, SQ8 + rerank5,000nprobe 32, rerank 10,0000.98290.98260.00140.93103.0312,3043.584.203.576
IVF, SQ8 + rerank5,000nprobe 32, rerank 20,0000.98300.98270.00140.93104.098,0965.436.045.435
IVF, SQ8 + rerank5,000nprobe 48, rerank 10,0000.99220.99210.00080.95853.5211,1703.934.603.939
IVF, SQ8 + rerank5,000nprobe 48, rerank 20,0000.99230.99220.00080.95854.627,4045.946.645.943
IVF, SQ8 + rerank5,000nprobe 64, rerank 10,0000.99560.99540.00060.97144.009,9794.405.124.409
IVF, SQ8 + rerank5,000nprobe 64, rerank 20,0000.99570.99550.00060.97145.076,8676.407.206.407
IVF, SQ8 + rerank5,000nprobe 96, rerank 10,0000.99800.99790.00030.98334.928,1945.366.245.369
IVF, SQ8 + rerank5,000nprobe 96, rerank 20,0000.99810.99800.00030.98336.056,0257.308.267.302
IVF, SQ8 + rerank5,000nprobe 128, rerank 10,0000.99880.99870.00020.98895.846,9526.317.356.329
IVF, SQ8 + rerank5,000nprobe 128, rerank 20,0000.99890.99880.00020.98896.935,4328.099.198.099
IVF, SQ8 + rerank5,000nprobe 192, rerank 10,0000.99940.99930.00020.99377.705,3388.249.458.243
IVF, SQ8 + rerank5,000nprobe 192, rerank 20,0000.99950.99930.00010.99378.794,4539.8711.189.880
IVF, SQ8 + rerank5,000nprobe 256, rerank 10,0000.99960.99950.00010.99599.514,32410.1811.5010.175
IVF, SQ8 + rerank5,000nprobe 256, rerank 20,0000.99970.99960.00010.995910.673,73311.7913.1911.787
IVF, SQ8 + rerank5,000nprobe 384, rerank 10,0000.99980.99970.00010.997813.163,13814.0515.7314.022
IVF, SQ8 + rerank5,000nprobe 384, rerank 20,0000.99980.99970.00010.997814.302,82315.6117.3415.584
IVF, SQ8 + rerank5,000nprobe 512, rerank 10,0000.99980.99980.00010.998616.812,46417.8919.8617.856
IVF, SQ8 + rerank5,000nprobe 512, rerank 20,0000.99990.99980.00010.998617.922,26319.4721.5119.444
HNSW10ef 100.84920.84020.01020.35980.06740,0590.060.130.060
HNSW10ef 200.90910.90760.00890.48940.09488,2790.090.190.090
HNSW10ef 400.94360.94110.00730.60300.13312,2460.130.300.141
HNSW10ef 800.96470.96220.00570.69930.22189,1070.220.510.233
HNSW10ef 1600.97790.97320.00430.78850.35111,4850.370.840.395
HNSW10ef 3200.98570.98450.00310.84160.5965,5190.621.460.672
HNSW10ef 6400.98900.98730.00250.88381.0238,3391.072.481.148
HNSW100ef 1000.95920.95790.00510.67510.25160,0100.260.590.275
HNSW100ef 1500.97360.97060.00430.74220.35116,3390.350.810.378
HNSW100ef 2000.97820.97630.00390.77760.4194,5210.431.000.466
HNSW100ef 4000.98790.98660.00250.84790.7155,1860.741.710.797
HNSW100ef 8000.99020.98830.00210.89411.2232,0051.282.971.375
HNSW100ef 1,6000.99220.99180.00150.92322.1518,1312.255.222.427
HNSW1,000ef 1,0000.98520.98450.00180.87101.4426,5911.543.561.655
HNSW1,000ef 1,5000.99100.99050.00150.90252.0519,0032.154.992.315
HNSW1,000ef 2,0000.99250.99210.00130.92482.5614,9832.736.232.937
HNSW1,000ef 4,0000.99430.99390.00100.94764.638,2534.9910.755.331
HNSW1,000ef 8,0000.99540.99520.00030.96798.874,4429.4418.919.905
HNSW5,000ef 5,0000.98870.98840.00100.93765.796,7226.1612.956.545
HNSW5,000ef 7,5000.99360.99290.00070.95898.204,7048.9017.869.354
HNSW5,000ef 10,0000.99480.99440.00030.970410.873,60611.6822.7912.202
HNSW5,000ef 15,0000.99530.99500.00030.977715.782,48117.1331.6217.732
HNSW5,000ef 20,0000.99560.99530.00030.982420.411,89422.5240.6823.227
HNSW5,000ef 40,0000.99610.99590.00030.987338.3098343.6874.8344.769
HNSW, SQ810ef 100.77370.76940.01020.35490.051,060,4730.040.080.042
HNSW, SQ810ef 200.81550.80550.00920.48110.06714,1210.060.130.062
HNSW, SQ810ef 400.84390.84090.00800.58510.10450,1590.090.200.098
HNSW, SQ810ef 800.86360.86100.00680.67090.15272,6130.150.340.161
HNSW, SQ810ef 1600.87510.86860.00600.74710.25162,0080.250.550.272
HNSW, SQ810ef 3200.88180.87790.00550.80090.4196,2830.430.930.457
HNSW, SQ810ef 6400.88500.88130.00520.83640.7355,5560.741.590.792
HNSW, SQ8100ef 1000.91020.90770.00530.66380.18230,4220.180.390.191
HNSW, SQ8100ef 1500.92050.91580.00460.72950.24168,8140.240.530.261
HNSW, SQ8100ef 2000.92380.92000.00440.76370.30136,8700.300.650.322
HNSW, SQ8100ef 4000.93220.92970.00330.82700.5080,6230.511.100.546
HNSW, SQ8100ef 8000.93390.93210.00310.86630.8746,0450.901.920.956
HNSW, SQ8100ef 1,6000.93520.93330.00290.89201.5725,7071.613.401.712
HNSW, SQ81,000ef 1,0000.96130.95950.00210.86081.0538,3021.082.281.149
HNSW, SQ81,000ef 1,5000.96500.96360.00180.88931.4627,0481.533.241.627
HNSW, SQ81,000ef 2,0000.96610.96450.00170.90921.9121,1291.964.072.082
HNSW, SQ81,000ef 4,0000.96710.96520.00160.93173.4211,6023.587.083.792
HNSW, SQ81,000ef 8,0000.96770.96640.00150.95086.646,1926.8212.577.106
HNSW, SQ85,000ef 5,0000.97520.97460.00120.93104.329,3984.458.544.682
HNSW, SQ85,000ef 7,5000.97850.97750.00100.94976.156,5266.4611.936.743
HNSW, SQ85,000ef 10,0000.97940.97910.00080.95798.074,9928.4915.228.814
HNSW, SQ85,000ef 15,0000.97970.97940.00080.964011.773,42512.4721.5212.848
HNSW, SQ85,000ef 20,0000.97990.97960.00080.968115.422,60416.4727.7316.898
HNSW, SQ85,000ef 40,0000.98030.97990.00080.973029.731,32632.5152.0433.182
HNSW, SQ8 + rerank10ef 200.88980.87900.00920.49140.07664,5860.060.130.066
HNSW, SQ8 + rerank10ef 400.92430.92160.00770.60300.10431,3300.100.210.102
HNSW, SQ8 + rerank10ef 800.94680.94410.00620.69600.15265,5710.160.340.166
HNSW, SQ8 + rerank10ef 1600.95950.95290.00500.78030.25159,0610.260.560.277
HNSW, SQ8 + rerank10ef 3200.96670.96300.00420.84010.4292,9960.440.960.473
HNSW, SQ8 + rerank10ef 6400.97010.96690.00370.87950.7355,2130.751.600.797
HNSW, SQ8 + rerank100ef 2000.97320.97060.00400.77750.34119,2450.350.710.369
HNSW, SQ8 + rerank100ef 4000.98290.98170.00260.84680.5373,9500.561.150.595
HNSW, SQ8 + rerank100ef 8000.98500.98450.00220.89070.9243,9110.951.981.002
HNSW, SQ8 + rerank100ef 1,6000.98650.98580.00190.91891.6325,0171.653.451.759
HNSW, SQ8 + rerank1,000ef 2,0000.99170.99150.00120.92432.2817,5392.384.512.509
HNSW, SQ8 + rerank1,000ef 4,0000.99310.99260.00110.95033.8510,3784.037.554.240
HNSW, SQ8 + rerank1,000ef 8,0000.99390.99330.00080.97147.005,8207.2713.047.560
HNSW, SQ8 + rerank5,000ef 10,0000.99450.99430.00030.970110.173,99710.6817.5511.008
HNSW, SQ8 + rerank5,000ef 15,0000.99510.99490.00030.977313.832,92114.6723.8615.062
HNSW, SQ8 + rerank5,000ef 20,0000.99540.99520.00030.981917.462,30018.6930.0119.131
HNSW, SQ8 + rerank5,000ef 40,0000.99590.99580.00030.987631.951,23135.0954.8535.746
The other codes and cell layouts
ApproachKSettingRecallWorst split±95%Text recall1-thread p50 msQPSp50 msp99 msCPU ms/q
IVF, SQ8, 16,384 cells10nprobe 80.88720.88650.00500.88491.1436,5851.171.911.203
IVF, SQ8, 16,384 cells10nprobe 160.88940.88900.00490.92302.0520,5192.123.232.145
IVF, SQ8, 16,384 cells10nprobe 240.88990.88940.00490.93492.9614,3433.044.483.068
IVF, SQ8, 16,384 cells10nprobe 320.89010.88950.00490.94073.8411,0533.965.563.982
IVF, SQ8, 16,384 cells10nprobe 480.89020.88950.00490.94525.617,5615.777.885.820
IVF, SQ8, 16,384 cells10nprobe 640.89030.88950.00490.94727.355,7637.589.957.637
IVF, SQ8, 16,384 cells10nprobe 960.89030.88950.00490.950910.833,89311.2014.1611.308
IVF, SQ8, 16,384 cells10nprobe 1280.89030.88950.00490.952114.412,93614.9118.2614.993
IVF, SQ8, 16,384 cells10nprobe 1920.89030.88950.00490.953021.541,96722.3126.5022.387
IVF, SQ8, 16,384 cells10nprobe 2560.89030.88950.00490.953428.581,48029.6234.5729.755
IVF, SQ8, 16,384 cells10nprobe 3840.89030.88950.00490.953942.9498844.3750.7244.581
IVF, SQ8, 16,384 cells10nprobe 5120.89030.88950.00490.954156.9774259.0366.6859.409
IVF, SQ8, 16,384 cells100nprobe 80.93850.93710.00260.89861.1636,1341.191.931.218
IVF, SQ8, 16,384 cells100nprobe 160.94230.94080.00250.93632.0720,3882.133.252.158
IVF, SQ8, 16,384 cells100nprobe 240.94290.94180.00250.94922.9814,2703.054.503.084
IVF, SQ8, 16,384 cells100nprobe 320.94310.94200.00250.95593.8611,0063.985.583.998
IVF, SQ8, 16,384 cells100nprobe 480.94330.94230.00250.96065.627,5385.797.905.838
IVF, SQ8, 16,384 cells100nprobe 640.94330.94240.00250.96307.355,7507.609.977.654
IVF, SQ8, 16,384 cells100nprobe 960.94340.94240.00250.966710.833,86711.2814.2411.382
IVF, SQ8, 16,384 cells100nprobe 1280.94340.94240.00250.967814.412,93314.9218.2815.012
IVF, SQ8, 16,384 cells100nprobe 1920.94340.94240.00250.968721.531,96722.3226.5022.389
IVF, SQ8, 16,384 cells100nprobe 2560.94340.94240.00250.969328.561,48029.6334.5429.756
IVF, SQ8, 16,384 cells100nprobe 3840.94340.94250.00250.969643.0698944.3550.5644.553
IVF, SQ8, 16,384 cells100nprobe 5120.94340.94250.00250.969756.9674358.9766.5159.336
IVF, SQ8, 16,384 cells1,000nprobe 80.95960.95870.00200.89781.2234,4171.252.011.279
IVF, SQ8, 16,384 cells1,000nprobe 160.96940.96890.00140.94302.1319,8092.203.342.221
IVF, SQ8, 16,384 cells1,000nprobe 240.97120.97070.00130.95853.0413,9803.124.573.148
IVF, SQ8, 16,384 cells1,000nprobe 320.97200.97140.00120.96613.9310,8334.045.674.062
IVF, SQ8, 16,384 cells1,000nprobe 480.97260.97180.00120.97195.697,4175.898.005.934
IVF, SQ8, 16,384 cells1,000nprobe 640.97280.97200.00120.97477.415,6987.6710.067.724
IVF, SQ8, 16,384 cells1,000nprobe 960.97290.97210.00120.977710.913,86211.2914.2611.397
IVF, SQ8, 16,384 cells1,000nprobe 1280.97290.97210.00120.978814.502,91914.9918.3415.079
IVF, SQ8, 16,384 cells1,000nprobe 1920.97300.97210.00120.979621.611,96122.3926.5822.460
IVF, SQ8, 16,384 cells1,000nprobe 2560.97300.97220.00120.980128.641,47729.7134.6129.828
IVF, SQ8, 16,384 cells1,000nprobe 3840.97300.97220.00120.980343.1198744.4350.6644.631
IVF, SQ8, 16,384 cells1,000nprobe 5120.97300.97220.00120.980556.9974259.0966.6259.450
IVF, SQ8, 16,384 cells5,000nprobe 80.94570.94300.00270.86821.3930,5891.412.221.439
IVF, SQ8, 16,384 cells5,000nprobe 160.97390.97270.00140.93512.2918,3702.363.532.395
IVF, SQ8, 16,384 cells5,000nprobe 240.97970.97900.00100.95673.2213,2373.294.743.324
IVF, SQ8, 16,384 cells5,000nprobe 320.98160.98080.00090.96714.0910,3784.215.854.240
IVF, SQ8, 16,384 cells5,000nprobe 480.98310.98270.00080.97525.867,2356.048.176.082
IVF, SQ8, 16,384 cells5,000nprobe 640.98360.98320.00070.97907.605,5697.8510.267.903
IVF, SQ8, 16,384 cells5,000nprobe 960.98390.98360.00070.982711.103,80211.4814.4411.579
IVF, SQ8, 16,384 cells5,000nprobe 1280.98400.98370.00070.984214.682,88415.1818.5215.264
IVF, SQ8, 16,384 cells5,000nprobe 1920.98410.98380.00070.985321.781,94522.5626.7822.637
IVF, SQ8, 16,384 cells5,000nprobe 2560.98420.98390.00070.985828.741,46829.8934.7730.012
IVF, SQ8, 16,384 cells5,000nprobe 3840.98420.98390.00070.986343.3098344.6150.8144.833
IVF, SQ8, 16,384 cells5,000nprobe 5120.98420.98390.00070.986557.2873659.5267.0359.910
IVF, SQ8, plain k-means10nprobe 80.88650.88570.00500.87751.3129,5381.344.411.490
IVF, SQ8, plain k-means10nprobe 160.88940.88860.00490.91492.3117,2612.376.222.549
IVF, SQ8, plain k-means10nprobe 240.88990.88940.00490.92813.2712,3883.367.443.552
IVF, SQ8, plain k-means10nprobe 320.89010.88940.00490.93334.209,7004.348.804.537
IVF, SQ8, plain k-means10nprobe 480.89020.88950.00490.94276.176,7416.3710.866.529
IVF, SQ8, plain k-means10nprobe 640.89030.88950.00490.94588.035,2168.2512.888.438
IVF, SQ8, plain k-means10nprobe 960.89030.88950.00490.949211.793,56312.1417.6112.353
IVF, SQ8, plain k-means10nprobe 1280.89030.88950.00490.951415.522,71216.0822.7816.232
IVF, SQ8, plain k-means10nprobe 1920.89030.88950.00490.952723.001,83823.8132.2423.965
IVF, SQ8, plain k-means10nprobe 2560.89030.88950.00490.953230.521,39031.4041.2831.685
IVF, SQ8, plain k-means10nprobe 3840.89030.88950.00490.953545.2493846.7060.3046.997
IVF, SQ8, plain k-means10nprobe 5120.89030.88950.00490.953660.2170762.1279.3262.384
IVF, SQ8, plain k-means100nprobe 80.93760.93590.00270.89031.3229,2051.364.441.507
IVF, SQ8, plain k-means100nprobe 160.94200.94080.00250.93022.3317,1352.396.252.568
IVF, SQ8, plain k-means100nprobe 240.94270.94170.00250.94483.3012,3133.387.503.574
IVF, SQ8, plain k-means100nprobe 320.94310.94210.00250.95034.219,6604.368.834.556
IVF, SQ8, plain k-means100nprobe 480.94330.94230.00250.95856.176,7606.3510.846.510
IVF, SQ8, plain k-means100nprobe 640.94340.94240.00250.96178.045,2058.2712.908.456
IVF, SQ8, plain k-means100nprobe 960.94340.94240.00250.964711.823,55712.1617.6412.375
IVF, SQ8, plain k-means100nprobe 1280.94340.94240.00250.967315.562,70916.1022.8116.253
IVF, SQ8, plain k-means100nprobe 1920.94340.94240.00250.968423.071,83623.8432.2523.987
IVF, SQ8, plain k-means100nprobe 2560.94340.94240.00250.969030.491,38931.4241.3331.709
IVF, SQ8, plain k-means100nprobe 3840.94340.94240.00250.969645.2293746.7260.3947.032
IVF, SQ8, plain k-means100nprobe 5120.94340.94250.00250.969760.2470562.2179.3762.548
IVF, SQ8, plain k-means1,000nprobe 80.95960.95840.00200.89731.4027,9981.424.471.572
IVF, SQ8, plain k-means1,000nprobe 160.96880.96800.00140.94002.4016,7192.466.312.632
IVF, SQ8, plain k-means1,000nprobe 240.97100.97020.00130.95493.3512,1013.447.543.637
IVF, SQ8, plain k-means1,000nprobe 320.97190.97110.00130.96164.299,5174.438.934.624
IVF, SQ8, plain k-means1,000nprobe 480.97240.97170.00120.96946.246,6876.4210.956.581
IVF, SQ8, plain k-means1,000nprobe 640.97260.97190.00120.97288.115,1628.3413.018.526
IVF, SQ8, plain k-means1,000nprobe 960.97280.97200.00120.975911.883,53612.2417.7712.448
IVF, SQ8, plain k-means1,000nprobe 1280.97290.97210.00120.977915.602,69616.1822.9016.329
IVF, SQ8, plain k-means1,000nprobe 1920.97290.97210.00120.979123.081,83023.9032.3724.058
IVF, SQ8, plain k-means1,000nprobe 2560.97300.97210.00120.979730.611,38631.5041.3931.787
IVF, SQ8, plain k-means1,000nprobe 3840.97300.97220.00120.980345.4593646.8060.4347.100
IVF, SQ8, plain k-means1,000nprobe 5120.97300.97220.00120.980460.3570662.1879.3362.438
IVF, SQ8, plain k-means5,000nprobe 80.95100.95090.00260.88021.5525,2671.584.591.742
IVF, SQ8, plain k-means5,000nprobe 160.97350.97310.00140.93502.5715,6582.636.492.810
IVF, SQ8, plain k-means5,000nprobe 240.97900.97860.00110.95413.5111,5163.627.783.821
IVF, SQ8, plain k-means5,000nprobe 320.98110.98080.00090.96324.469,1504.619.184.810
IVF, SQ8, plain k-means5,000nprobe 480.98270.98230.00080.97246.446,5036.6111.236.768
IVF, SQ8, plain k-means5,000nprobe 640.98330.98300.00080.97708.295,0498.5213.308.718
IVF, SQ8, plain k-means5,000nprobe 960.98380.98340.00070.981112.063,48212.4317.9512.642
IVF, SQ8, plain k-means5,000nprobe 1280.98390.98360.00070.983215.782,66516.3623.1716.520
IVF, SQ8, plain k-means5,000nprobe 1920.98410.98370.00070.984723.291,81224.1332.7324.303
IVF, SQ8, plain k-means5,000nprobe 2560.98410.98380.00070.985530.791,37831.6941.5631.970
IVF, SQ8, plain k-means5,000nprobe 3840.98420.98390.00070.986245.4793246.9760.5847.273
IVF, SQ8, plain k-means5,000nprobe 5120.98420.98390.00070.986460.4670362.4079.6162.687
IVF, plain k-means10nprobe 80.99380.99190.00180.91601.599,6074.0114.034.581
IVF, plain k-means10nprobe 160.99710.99580.00140.95712.835,3017.6520.688.302
IVF, plain k-means10nprobe 240.99760.99640.00130.97163.993,73411.0625.8311.787
IVF, plain k-means10nprobe 320.99780.99670.00130.97745.182,89414.4730.5015.213
IVF, plain k-means10nprobe 480.99800.99700.00120.98757.611,99821.2939.1722.039
IVF, plain k-means10nprobe 640.99810.99700.00120.99089.931,52428.0948.0728.888
IVF, plain k-means10nprobe 960.99810.99700.00120.994414.581,03641.6166.7042.520
IVF, plain k-means10nprobe 1280.99810.99700.00120.996919.2478854.9583.7055.890
IVF, plain k-means10nprobe 1920.99810.99700.00120.998328.6053381.03117.5482.707
IVF, plain k-means10nprobe 2560.99810.99700.00120.998937.88403107.48150.46109.606
IVF, plain k-means10nprobe 3840.99810.99700.00120.999356.30270160.34218.72163.656
IVF, plain k-means10nprobe 5120.99810.99700.00120.999474.51202212.74285.10218.557
IVF, plain k-means100nprobe 80.99280.99200.00140.91111.619,5934.0413.864.587
IVF, plain k-means100nprobe 160.99790.99760.00050.95472.875,3207.6120.458.274
IVF, plain k-means100nprobe 240.99890.99870.00030.97104.043,73411.0725.6711.786
IVF, plain k-means100nprobe 320.99930.99920.00020.97745.162,88814.4930.3815.239
IVF, plain k-means100nprobe 480.99960.99950.00020.98657.601,99521.3139.0822.066
IVF, plain k-means100nprobe 640.99970.99960.00010.99029.951,52228.0648.4628.926
IVF, plain k-means100nprobe 960.99980.99970.00010.993614.641,03541.6366.6942.554
IVF, plain k-means100nprobe 1280.99980.99970.00010.996619.2778355.2784.1556.281
IVF, plain k-means100nprobe 1920.99980.99970.00010.998028.6953381.42117.4282.694
IVF, plain k-means100nprobe 2560.99980.99970.00010.998738.14401108.00151.82110.095
IVF, plain k-means100nprobe 3840.99980.99970.00010.999456.35269161.14218.77164.458
IVF, plain k-means100nprobe 5120.99980.99970.00010.999674.47202213.50285.21218.414
IVF, plain k-means1,000nprobe 80.98410.98360.00180.90771.669,5604.0713.834.603
IVF, plain k-means1,000nprobe 160.99470.99470.00090.95362.905,3067.6520.498.294
IVF, plain k-means1,000nprobe 240.99740.99730.00060.97004.083,72611.1025.5611.814
IVF, plain k-means1,000nprobe 320.99850.99840.00040.97765.232,88514.5330.2015.255
IVF, plain k-means1,000nprobe 480.99920.99920.00030.98627.681,99221.3239.0722.102
IVF, plain k-means1,000nprobe 640.99950.99940.00020.99029.981,52128.1848.1828.951
IVF, plain k-means1,000nprobe 960.99970.99970.00020.993814.841,03441.6366.3242.592
IVF, plain k-means1,000nprobe 1280.99980.99980.00010.996219.5378754.9683.2456.015
IVF, plain k-means1,000nprobe 1920.99990.99990.00010.997828.8553281.45118.5682.917
IVF, plain k-means1,000nprobe 2560.99990.99990.00010.998638.19402107.71152.48109.656
IVF, plain k-means1,000nprobe 3841.00000.99990.00000.999356.22269160.66218.98164.074
IVF, plain k-means1,000nprobe 5121.00001.00000.00000.999574.28202213.64288.26218.475
IVF, plain k-means5,000nprobe 80.96210.96180.00260.88471.809,3974.1813.504.683
IVF, plain k-means5,000nprobe 160.98700.98690.00140.94213.065,2567.7520.118.374
IVF, plain k-means5,000nprobe 240.99350.99330.00090.96274.223,70011.2125.1911.896
IVF, plain k-means5,000nprobe 320.99600.99590.00070.97265.392,86814.6130.3215.347
IVF, plain k-means5,000nprobe 480.99800.99780.00040.98287.801,98621.4538.6822.168
IVF, plain k-means5,000nprobe 640.99870.99850.00030.987910.131,51728.2647.3429.025
IVF, plain k-means5,000nprobe 960.99930.99920.00020.992614.751,03341.6766.8342.646
IVF, plain k-means5,000nprobe 1280.99960.99940.00020.995219.3278555.1184.4756.120
IVF, plain k-means5,000nprobe 1920.99980.99970.00010.997128.8653281.33116.7282.950
IVF, plain k-means5,000nprobe 2560.99980.99980.00010.998138.29401107.83152.27110.014
IVF, plain k-means5,000nprobe 3840.99990.99990.00010.998956.35269160.73219.63164.282
IVF, plain k-means5,000nprobe 5120.99990.99990.00000.999374.49202213.86287.01219.293
IVF, SQ8 + rerank, 16,384 cells10nprobe 8, rerank 2000.99420.99240.00180.92171.1835,3781.211.961.244
IVF, SQ8 + rerank, 16,384 cells10nprobe 16, rerank 2000.99660.99500.00140.96542.0920,1592.163.282.183
IVF, SQ8 + rerank, 16,384 cells10nprobe 24, rerank 2000.99710.99580.00130.97862.9914,1563.084.523.108
IVF, SQ8 + rerank, 16,384 cells10nprobe 32, rerank 2000.99740.99630.00130.98513.8910,9294.015.614.026
IVF, SQ8 + rerank, 16,384 cells10nprobe 48, rerank 2000.99750.99650.00130.99015.647,5215.817.915.850
IVF, SQ8 + rerank, 16,384 cells10nprobe 64, rerank 2000.99760.99660.00130.99237.405,7477.619.977.656
IVF, SQ8 + rerank, 16,384 cells10nprobe 96, rerank 2000.99760.99660.00130.996210.883,88911.2214.1711.314
IVF, SQ8 + rerank, 16,384 cells10nprobe 128, rerank 2000.99760.99660.00130.997714.432,93914.9118.2414.969
IVF, SQ8 + rerank, 16,384 cells10nprobe 192, rerank 2000.99760.99660.00130.998621.561,97022.3026.5022.335
IVF, SQ8 + rerank, 16,384 cells10nprobe 256, rerank 2000.99760.99660.00130.999028.621,48729.5634.4529.598
IVF, SQ8 + rerank, 16,384 cells10nprobe 384, rerank 2000.99760.99660.00130.999743.0399544.2350.4544.227
IVF, SQ8 + rerank, 16,384 cells10nprobe 512, rerank 2000.99760.99660.00130.999956.9674858.7866.2958.800
IVF, SQ8 + rerank, 16,384 cells100nprobe 8, rerank 2000.98900.98850.00170.91901.1835,2171.221.961.249
IVF, SQ8 + rerank, 16,384 cells100nprobe 8, rerank 4000.99240.99200.00130.91911.2134,2201.262.011.286
IVF, SQ8 + rerank, 16,384 cells100nprobe 16, rerank 2000.99370.99300.00120.96072.1020,0412.173.302.196
IVF, SQ8 + rerank, 16,384 cells100nprobe 16, rerank 4000.99720.99670.00070.96082.1219,7582.203.332.227
IVF, SQ8 + rerank, 16,384 cells100nprobe 24, rerank 2000.99450.99430.00120.97563.0014,1403.084.533.112
IVF, SQ8 + rerank, 16,384 cells100nprobe 24, rerank 4000.99790.99780.00060.97583.0313,9653.124.573.151
IVF, SQ8 + rerank, 16,384 cells100nprobe 32, rerank 2000.99480.99460.00120.98333.8910,9374.005.604.023
IVF, SQ8 + rerank, 16,384 cells100nprobe 32, rerank 4000.99830.99810.00050.98353.9210,8294.045.654.063
IVF, SQ8 + rerank, 16,384 cells100nprobe 48, rerank 2000.99500.99490.00110.98875.657,5185.817.915.853
IVF, SQ8 + rerank, 16,384 cells100nprobe 48, rerank 4000.99850.99830.00050.98895.687,4655.857.955.894
IVF, SQ8 + rerank, 16,384 cells100nprobe 64, rerank 2000.99510.99500.00110.99157.385,7407.629.987.665
IVF, SQ8 + rerank, 16,384 cells100nprobe 64, rerank 4000.99860.99840.00050.99167.435,7107.6610.037.706
IVF, SQ8 + rerank, 16,384 cells100nprobe 96, rerank 2000.99520.99500.00110.995710.883,88811.2214.1811.316
IVF, SQ8 + rerank, 16,384 cells100nprobe 96, rerank 4000.99860.99850.00050.995910.903,87311.2714.2211.360
IVF, SQ8 + rerank, 16,384 cells100nprobe 128, rerank 2000.99520.99500.00110.997114.452,92215.0018.3815.057
IVF, SQ8 + rerank, 16,384 cells100nprobe 128, rerank 4000.99870.99850.00050.997214.482,93014.9518.2915.018
IVF, SQ8 + rerank, 16,384 cells100nprobe 192, rerank 2000.99520.99500.00110.998221.591,97422.2726.4422.290
IVF, SQ8 + rerank, 16,384 cells100nprobe 192, rerank 4000.99870.99850.00050.998421.621,97022.3226.4922.338
IVF, SQ8 + rerank, 16,384 cells100nprobe 256, rerank 2000.99520.99500.00110.998928.561,48729.5534.4529.590
IVF, SQ8 + rerank, 16,384 cells100nprobe 256, rerank 4000.99870.99850.00050.999128.611,48429.6234.4829.642
IVF, SQ8 + rerank, 16,384 cells100nprobe 384, rerank 2000.99520.99500.00110.999343.0999544.2250.3944.215
IVF, SQ8 + rerank, 16,384 cells100nprobe 384, rerank 4000.99870.99850.00050.999543.1199444.2750.4444.274
IVF, SQ8 + rerank, 16,384 cells100nprobe 512, rerank 2000.99520.99500.00110.999657.1374858.8466.3158.851
IVF, SQ8 + rerank, 16,384 cells100nprobe 512, rerank 4000.99870.99850.00050.999756.9674758.8766.3758.888
IVF, SQ8 + rerank, 16,384 cells1,000nprobe 8, rerank 2,0000.98290.98230.00180.90741.4627,8691.552.341.579
IVF, SQ8 + rerank, 16,384 cells1,000nprobe 8, rerank 4,0000.98340.98290.00180.90741.7023,3441.862.671.885
IVF, SQ8 + rerank, 16,384 cells1,000nprobe 16, rerank 2,0000.99470.99410.00080.95632.3817,4432.503.652.522
IVF, SQ8 + rerank, 16,384 cells1,000nprobe 16, rerank 4,0000.99520.99470.00080.95632.6015,5392.803.972.831
IVF, SQ8 + rerank, 16,384 cells1,000nprobe 24, rerank 2,0000.99710.99690.00060.97363.2812,7793.424.873.443
IVF, SQ8 + rerank, 16,384 cells1,000nprobe 24, rerank 4,0000.99770.99750.00050.97363.5311,7163.735.183.755
IVF, SQ8 + rerank, 16,384 cells1,000nprobe 32, rerank 2,0000.99800.99770.00050.98234.1710,1024.335.974.355
IVF, SQ8 + rerank, 16,384 cells1,000nprobe 32, rerank 4,0000.99860.99830.00040.98234.419,4224.646.294.670
IVF, SQ8 + rerank, 16,384 cells1,000nprobe 48, rerank 2,0000.99870.99860.00040.98905.947,1096.158.266.189
IVF, SQ8 + rerank, 16,384 cells1,000nprobe 48, rerank 4,0000.99930.99920.00020.98916.186,7696.468.586.500
IVF, SQ8 + rerank, 16,384 cells1,000nprobe 64, rerank 2,0000.99900.99890.00030.99237.675,4867.9710.388.020
IVF, SQ8 + rerank, 16,384 cells1,000nprobe 64, rerank 4,0000.99960.99950.00010.99237.945,2988.2610.678.304
IVF, SQ8 + rerank, 16,384 cells1,000nprobe 96, rerank 2,0000.99920.99920.00030.995911.163,77811.5614.5111.646
IVF, SQ8 + rerank, 16,384 cells1,000nprobe 96, rerank 4,0000.99980.99980.00010.996011.413,68211.8614.8111.951
IVF, SQ8 + rerank, 16,384 cells1,000nprobe 128, rerank 2,0000.99930.99920.00030.997414.722,87515.2418.5815.305
IVF, SQ8 + rerank, 16,384 cells1,000nprobe 128, rerank 4,0000.99980.99980.00010.997414.972,81915.5518.8815.610
IVF, SQ8 + rerank, 16,384 cells1,000nprobe 192, rerank 2,0000.99930.99930.00030.998421.831,94522.6126.7922.621
IVF, SQ8 + rerank, 16,384 cells1,000nprobe 192, rerank 4,0000.99990.99990.00010.998522.111,92122.9027.1022.910
IVF, SQ8 + rerank, 16,384 cells1,000nprobe 256, rerank 2,0000.99930.99930.00030.999028.861,47029.8934.7529.926
IVF, SQ8 + rerank, 16,384 cells1,000nprobe 256, rerank 4,0000.99990.99990.00010.999029.081,44830.3435.2730.387
IVF, SQ8 + rerank, 16,384 cells1,000nprobe 384, rerank 2,0000.99930.99930.00030.999443.2998744.5650.7244.579
IVF, SQ8 + rerank, 16,384 cells1,000nprobe 384, rerank 4,0000.99990.99990.00010.999443.6098144.8751.0644.870
IVF, SQ8 + rerank, 16,384 cells1,000nprobe 512, rerank 2,0000.99930.99930.00030.999657.3574459.1566.5159.151
IVF, SQ8 + rerank, 16,384 cells1,000nprobe 512, rerank 4,0000.99990.99990.00010.999657.4774059.4366.8559.428
IVF, SQ8 + rerank, 16,384 cells5,000nprobe 8, rerank 10,0000.95540.95290.00280.87192.4814,6022.993.843.013
IVF, SQ8 + rerank, 16,384 cells5,000nprobe 8, rerank 20,0000.95540.95290.00280.87193.549,2474.745.634.758
IVF, SQ8 + rerank, 16,384 cells5,000nprobe 16, rerank 10,0000.98710.98620.00130.94183.4111,1193.935.133.957
IVF, SQ8 + rerank, 16,384 cells5,000nprobe 16, rerank 20,0000.98720.98620.00130.94184.557,6915.686.965.721
IVF, SQ8 + rerank, 16,384 cells5,000nprobe 24, rerank 10,0000.99410.99370.00080.96514.349,0274.856.324.874
IVF, SQ8 + rerank, 16,384 cells5,000nprobe 24, rerank 20,0000.99420.99380.00080.96515.476,5886.658.186.678
IVF, SQ8 + rerank, 16,384 cells5,000nprobe 32, rerank 10,0000.99650.99600.00060.97665.217,6165.757.435.777
IVF, SQ8 + rerank, 16,384 cells5,000nprobe 32, rerank 20,0000.99650.99610.00060.97666.345,8517.499.197.520
IVF, SQ8 + rerank, 16,384 cells5,000nprobe 48, rerank 10,0000.99830.99820.00030.98577.015,7927.569.687.596
IVF, SQ8 + rerank, 16,384 cells5,000nprobe 48, rerank 20,0000.99840.99830.00030.98578.154,7319.2611.429.301
IVF, SQ8 + rerank, 16,384 cells5,000nprobe 64, rerank 10,0000.99900.99890.00030.99018.714,6859.3311.849.392
IVF, SQ8 + rerank, 16,384 cells5,000nprobe 64, rerank 20,0000.99910.99900.00020.99019.883,96711.0313.5611.090
IVF, SQ8 + rerank, 16,384 cells5,000nprobe 96, rerank 10,0000.99950.99940.00020.994412.213,37612.9515.9513.032
IVF, SQ8 + rerank, 16,384 cells5,000nprobe 96, rerank 20,0000.99950.99950.00010.994413.352,99614.6017.6614.684
IVF, SQ8 + rerank, 16,384 cells5,000nprobe 128, rerank 10,0000.99960.99960.00010.996415.812,63816.6320.0016.677
IVF, SQ8 + rerank, 16,384 cells5,000nprobe 128, rerank 20,0000.99970.99960.00010.996416.952,40418.2421.7218.305
IVF, SQ8 + rerank, 16,384 cells5,000nprobe 192, rerank 10,0000.99980.99970.00010.997922.951,83623.9428.1623.962
IVF, SQ8 + rerank, 16,384 cells5,000nprobe 192, rerank 20,0000.99980.99980.00010.997924.021,72225.5129.8325.554
IVF, SQ8 + rerank, 16,384 cells5,000nprobe 256, rerank 10,0000.99980.99980.00010.998529.911,40831.2236.1331.259
IVF, SQ8 + rerank, 16,384 cells5,000nprobe 256, rerank 20,0000.99990.99980.00010.998531.141,34132.7637.6832.808
IVF, SQ8 + rerank, 16,384 cells5,000nprobe 384, rerank 10,0000.99990.99990.00010.999144.4396045.8752.0645.855
IVF, SQ8 + rerank, 16,384 cells5,000nprobe 384, rerank 20,0000.99990.99990.00010.999145.5492847.4153.7047.400
IVF, SQ8 + rerank, 16,384 cells5,000nprobe 512, rerank 10,0000.99990.99990.00010.999458.3472860.4167.9260.407
IVF, SQ8 + rerank, 16,384 cells5,000nprobe 512, rerank 20,0001.00000.99990.00000.999459.4470961.9969.7362.066
IVF, LVQ810nprobe 80.91930.91750.00410.88801.8321,3741.856.522.059
IVF, LVQ810nprobe 160.92220.92110.00400.92653.2812,3543.308.903.562
IVF, LVQ810nprobe 240.92270.92170.00390.93994.688,8074.7110.654.996
IVF, LVQ810nprobe 320.92280.92190.00390.94516.036,8836.1112.576.392
IVF, LVQ810nprobe 480.92300.92220.00390.95468.864,8018.9415.479.165
IVF, LVQ810nprobe 640.92300.92220.00390.957811.613,68311.6818.4311.947
IVF, LVQ810nprobe 960.92300.92220.00390.961017.062,51417.2225.3117.504
IVF, LVQ810nprobe 1280.92300.92220.00390.963222.511,90522.9232.8923.103
IVF, LVQ810nprobe 1920.92300.92220.00390.964533.451,29533.8046.1033.980
IVF, LVQ810nprobe 2560.92300.92220.00390.965044.6797944.7159.2544.950
IVF, LVQ810nprobe 3840.92300.92220.00390.965465.8866066.4586.4066.655
IVF, LVQ810nprobe 5120.92300.92220.00390.965588.4049688.72114.8488.644
IVF, LVQ8100nprobe 80.95360.95260.00220.89671.8521,1591.866.532.079
IVF, LVQ8100nprobe 160.95810.95710.00190.93763.3112,2613.338.923.589
IVF, LVQ8100nprobe 240.95890.95800.00190.95244.708,7584.7410.905.024
IVF, LVQ8100nprobe 320.95930.95830.00190.95826.066,8466.1412.646.427
IVF, LVQ8100nprobe 480.95950.95850.00190.96668.934,7788.9815.559.208
IVF, LVQ8100nprobe 640.95960.95860.00190.969911.743,66511.7418.5512.006
IVF, LVQ8100nprobe 960.95960.95870.00190.972917.122,50417.2925.4117.574
IVF, LVQ8100nprobe 1280.95970.95870.00190.975722.611,90322.9433.0623.119
IVF, LVQ8100nprobe 1920.95970.95870.00190.976833.721,28833.9746.3734.159
IVF, LVQ8100nprobe 2560.95970.95870.00190.977444.8597544.9059.7045.140
IVF, LVQ8100nprobe 3840.95970.95870.00190.978066.0465666.8887.3567.028
IVF, LVQ8100nprobe 5120.95970.95870.00190.978288.7249389.27115.4889.231
IVF, LVQ81,000nprobe 80.96730.96630.00190.90071.9320,4061.946.412.156
IVF, LVQ81,000nprobe 160.97680.97640.00120.94413.3811,9463.429.063.683
IVF, LVQ81,000nprobe 240.97910.97870.00100.95934.788,6194.8211.015.105
IVF, LVQ81,000nprobe 320.98010.97960.00100.96626.136,7636.2212.746.506
IVF, LVQ81,000nprobe 480.98070.98020.00090.97418.984,7379.0615.659.288
IVF, LVQ81,000nprobe 640.98090.98040.00090.977611.753,64511.8118.6412.072
IVF, LVQ81,000nprobe 960.98110.98060.00090.980817.182,49217.3725.4617.655
IVF, LVQ81,000nprobe 1280.98110.98060.00090.982922.751,89723.0033.0723.194
IVF, LVQ81,000nprobe 1920.98120.98070.00090.984133.731,28534.0646.5534.242
IVF, LVQ81,000nprobe 2560.98120.98070.00090.984844.7097444.9259.5445.177
IVF, LVQ81,000nprobe 3840.98120.98070.00090.985465.8365467.1487.2167.271
IVF, LVQ81,000nprobe 5120.98130.98070.00090.985688.8549489.12114.9089.074
IVF, LVQ85,000nprobe 80.95460.95460.00260.88182.0818,8272.106.972.337
IVF, LVQ85,000nprobe 160.97790.97750.00140.93733.5611,4093.609.213.857
IVF, LVQ85,000nprobe 240.98370.98330.00100.95684.948,3075.0011.275.296
IVF, LVQ85,000nprobe 320.98590.98560.00080.96616.326,5696.4113.016.698
IVF, LVQ85,000nprobe 480.98750.98720.00060.97559.184,6419.2516.009.481
IVF, LVQ85,000nprobe 640.98810.98790.00060.980111.883,58711.9919.0412.267
IVF, LVQ85,000nprobe 960.98860.98840.00060.984417.392,46617.5425.6017.840
IVF, LVQ85,000nprobe 1280.98880.98860.00050.986622.851,88423.1633.1723.349
IVF, LVQ85,000nprobe 1920.98900.98870.00050.988233.951,28034.1746.7034.378
IVF, LVQ85,000nprobe 2560.98900.98870.00050.989044.8897245.0359.6045.280
IVF, LVQ85,000nprobe 3840.98910.98880.00050.989765.9765467.0986.9367.274
IVF, LVQ85,000nprobe 5120.98910.98890.00050.989988.3949489.19115.2789.098
IVF, TQ810nprobe 80.68410.67870.00850.79175.696,9255.6421.006.354
IVF, TQ810nprobe 160.68630.68070.00850.823210.383,90010.4428.7311.283
IVF, TQ810nprobe 240.68670.68140.00860.834115.052,74915.0834.3416.004
IVF, TQ810nprobe 320.68680.68140.00860.837919.412,13219.7440.9420.637
IVF, TQ810nprobe 480.68700.68170.00860.846529.611,47529.1050.6729.839
IVF, TQ810nprobe 640.68710.68170.00860.848837.831,13537.8259.9338.757
IVF, TQ810nprobe 960.68710.68170.00860.851156.4677255.9484.3956.966
IVF, TQ810nprobe 1280.68710.68170.00860.853172.8858874.06110.3874.774
IVF, TQ810nprobe 1920.68700.68160.00860.8544110.98399109.62150.00110.323
IVF, TQ810nprobe 2560.68700.68160.00860.8548145.23302145.10193.11145.878
IVF, TQ810nprobe 3840.68700.68160.00860.8551215.51203216.12283.84216.591
IVF, TQ810nprobe 5120.68700.68160.00860.8550283.85154287.29369.29286.686
IVF, TQ8100nprobe 80.79960.79690.00590.82895.716,9055.6620.946.372
IVF, TQ8100nprobe 160.80300.80080.00590.863410.523,89010.4728.7711.310
IVF, TQ8100nprobe 240.80360.80150.00590.875815.092,74415.1134.5916.036
IVF, TQ8100nprobe 320.80390.80200.00590.880519.472,13719.6940.8120.588
IVF, TQ8100nprobe 480.80400.80210.00590.887828.961,48128.9950.4129.718
IVF, TQ8100nprobe 640.80410.80210.00590.890438.371,13537.8159.9038.775
IVF, TQ8100nprobe 960.80410.80220.00590.893157.0977256.0384.8456.981
IVF, TQ8100nprobe 1280.80410.80220.00590.895573.1959073.87110.3374.546
IVF, TQ8100nprobe 1920.80410.80220.00590.8963111.10399109.57150.21110.249
IVF, TQ8100nprobe 2560.80410.80220.00590.8968145.61302144.75190.50145.814
IVF, TQ8100nprobe 3840.80410.80220.00590.8973216.51203215.86279.66216.591
IVF, TQ8100nprobe 5120.80410.80220.00590.8974284.62153287.17368.80286.811
IVF, TQ81,000nprobe 80.88550.88360.00390.86125.776,8355.7320.886.438
IVF, TQ81,000nprobe 160.89270.89120.00380.898510.513,85610.5729.0111.410
IVF, TQ81,000nprobe 240.89440.89280.00380.911315.092,73915.1534.5516.065
IVF, TQ81,000nprobe 320.89510.89350.00380.917119.532,12719.8040.9320.686
IVF, TQ81,000nprobe 480.89560.89400.00380.923829.001,47629.1150.6329.819
IVF, TQ81,000nprobe 640.89570.89410.00380.926638.301,13237.9260.3038.860
IVF, TQ81,000nprobe 960.89590.89420.00380.929256.6677355.8683.4856.902
IVF, TQ81,000nprobe 1280.89590.89420.00380.931073.7259073.90109.0374.562
IVF, TQ81,000nprobe 1920.89600.89430.00380.9319111.37399109.31149.90110.213
IVF, TQ81,000nprobe 2560.89600.89430.00380.9325146.34302144.92190.56145.814
IVF, TQ81,000nprobe 3840.89600.89430.00380.9329216.12203215.66280.90216.520
IVF, TQ81,000nprobe 5120.89600.89430.00380.9331284.45153287.69369.10287.185
IVF, TQ85,000nprobe 80.91100.90910.00310.86145.866,6575.8721.426.609
IVF, TQ85,000nprobe 160.92930.92710.00260.910610.713,80610.7129.1111.559
IVF, TQ85,000nprobe 240.93370.93150.00250.927315.262,70715.3135.1016.256
IVF, TQ85,000nprobe 320.93540.93330.00240.935219.802,11019.9441.2420.850
IVF, TQ85,000nprobe 480.93660.93460.00240.943229.331,46729.2750.7929.991
IVF, TQ85,000nprobe 640.93710.93510.00240.947138.541,12738.0960.5039.050
IVF, TQ85,000nprobe 960.93750.93550.00240.950556.8877056.0684.2957.119
IVF, TQ85,000nprobe 1280.93760.93560.00240.952373.2358874.13111.0874.876
IVF, TQ85,000nprobe 1920.93770.93570.00240.9536112.22399109.59150.30110.360
IVF, TQ85,000nprobe 2560.93780.93580.00240.9542146.57301144.89191.95146.104
IVF, TQ85,000nprobe 3840.93780.93580.00240.9548216.44202216.14281.17217.375
IVF, TQ85,000nprobe 5120.93790.93590.00240.9550284.91153286.95369.20287.185
IVF, RaBitQ + 4-bit rescore10nprobe 32, rerank 2000.57040.56290.00930.66101.5327,3821.542.981.607
IVF, RaBitQ + 4-bit rescore10nprobe 64, rerank 2000.57040.56290.00930.66822.7615,5812.774.262.824
IVF, RaBitQ + 4-bit rescore10nprobe 128, rerank 2000.57040.56290.00930.66995.178,3885.207.385.245
IVF, RaBitQ + 4-bit rescore10nprobe 256, rerank 2000.57050.56290.00930.67039.934,3889.9713.0710.027
IVF, RaBitQ + 4-bit rescore10nprobe 512, rerank 2000.57050.56290.00930.670319.432,24619.6025.0919.588
IVF, RaBitQ + 4-bit rescore100nprobe 32, rerank 2000.47030.46260.00780.48351.5327,3451.552.991.609
IVF, RaBitQ + 4-bit rescore100nprobe 32, rerank 4000.61910.60830.00800.63101.5826,4871.603.051.661
IVF, RaBitQ + 4-bit rescore100nprobe 32, rerank 8000.72610.71880.00700.74401.6725,0921.693.151.754
IVF, RaBitQ + 4-bit rescore100nprobe 64, rerank 2000.47020.46250.00780.48722.7715,5482.774.272.830
IVF, RaBitQ + 4-bit rescore100nprobe 64, rerank 4000.61900.60820.00800.63572.8215,2672.824.342.882
IVF, RaBitQ + 4-bit rescore100nprobe 64, rerank 8000.72610.71890.00700.75042.9114,7982.924.462.973
IVF, RaBitQ + 4-bit rescore100nprobe 128, rerank 2000.47020.46250.00780.48835.178,3865.207.385.247
IVF, RaBitQ + 4-bit rescore100nprobe 128, rerank 4000.61900.60820.00800.63765.238,3045.257.455.299
IVF, RaBitQ + 4-bit rescore100nprobe 128, rerank 8000.72610.71890.00700.75325.328,1605.357.565.392
IVF, RaBitQ + 4-bit rescore100nprobe 256, rerank 2000.47010.46250.00780.48819.954,3869.9713.0710.032
IVF, RaBitQ + 4-bit rescore100nprobe 256, rerank 4000.61900.60820.00800.63799.994,36410.0213.1210.082
IVF, RaBitQ + 4-bit rescore100nprobe 256, rerank 8000.72610.71890.00700.753710.084,31410.1413.2410.199
IVF, RaBitQ + 4-bit rescore100nprobe 512, rerank 2000.47010.46250.00780.488019.442,25019.5825.0319.556
IVF, RaBitQ + 4-bit rescore100nprobe 512, rerank 4000.61900.60820.00800.638019.492,24319.6325.1019.616
IVF, RaBitQ + 4-bit rescore100nprobe 512, rerank 8000.72610.71890.00700.753919.592,23219.7325.1919.714
IVF, RaBitQ + 4-bit rescore1,000nprobe 32, rerank 2,0000.73860.73440.00620.70311.9521,7021.963.492.028
IVF, RaBitQ + 4-bit rescore1,000nprobe 32, rerank 4,0000.85530.85280.00480.82862.3318,2462.343.982.411
IVF, RaBitQ + 4-bit rescore1,000nprobe 32, rerank 8,0000.89850.89650.00330.88183.0314,0793.054.853.125
IVF, RaBitQ + 4-bit rescore1,000nprobe 64, rerank 2,0000.73850.73430.00620.70633.1813,5583.194.803.245
IVF, RaBitQ + 4-bit rescore1,000nprobe 64, rerank 4,0000.85550.85290.00480.83403.5612,1203.565.233.630
IVF, RaBitQ + 4-bit rescore1,000nprobe 64, rerank 8,0000.89890.89680.00330.88894.2810,0984.296.094.357
IVF, RaBitQ + 4-bit rescore1,000nprobe 128, rerank 2,0000.73850.73430.00620.70725.597,7655.627.875.666
IVF, RaBitQ + 4-bit rescore1,000nprobe 128, rerank 4,0000.85560.85300.00480.83605.957,2576.008.336.063
IVF, RaBitQ + 4-bit rescore1,000nprobe 128, rerank 8,0000.89900.89690.00330.89186.696,4866.739.156.784
IVF, RaBitQ + 4-bit rescore1,000nprobe 256, rerank 2,0000.73850.73420.00620.707210.344,21010.4013.5010.452
IVF, RaBitQ + 4-bit rescore1,000nprobe 256, rerank 4,0000.85560.85300.00480.836510.734,06010.7913.9010.837
IVF, RaBitQ + 4-bit rescore1,000nprobe 256, rerank 8,0000.89910.89690.00330.892711.473,80311.5214.7411.569
IVF, RaBitQ + 4-bit rescore1,000nprobe 512, rerank 2,0000.73850.73420.00620.707119.872,20220.0125.5019.985
IVF, RaBitQ + 4-bit rescore1,000nprobe 512, rerank 4,0000.85560.85300.00480.836720.262,15920.4025.8920.378
IVF, RaBitQ + 4-bit rescore1,000nprobe 512, rerank 8,0000.89910.89690.00330.893020.982,08521.1526.5921.107
IVF, RaBitQ + 4-bit rescore5,000nprobe 32, rerank 10,0000.86960.86700.00410.83563.4912,2323.535.333.597
IVF, RaBitQ + 4-bit rescore5,000nprobe 32, rerank 20,0000.93200.93080.00230.90735.188,2115.297.325.359
IVF, RaBitQ + 4-bit rescore5,000nprobe 32, rerank 40,0000.94550.94480.00140.92498.554,9668.8011.148.860
IVF, RaBitQ + 4-bit rescore5,000nprobe 64, rerank 10,0000.86990.86740.00410.84064.769,1034.776.634.833
IVF, RaBitQ + 4-bit rescore5,000nprobe 64, rerank 20,0000.93310.93190.00230.91556.416,6416.568.676.625
IVF, RaBitQ + 4-bit rescore5,000nprobe 64, rerank 40,0000.94680.94620.00140.93459.814,31710.1212.6810.191
IVF, RaBitQ + 4-bit rescore5,000nprobe 128, rerank 10,0000.87000.86750.00410.84237.116,0587.219.677.263
IVF, RaBitQ + 4-bit rescore5,000nprobe 128, rerank 20,0000.93340.93230.00230.91888.854,8489.0211.819.077
IVF, RaBitQ + 4-bit rescore5,000nprobe 128, rerank 40,0000.94730.94660.00140.938612.413,46712.6415.8112.690
IVF, RaBitQ + 4-bit rescore5,000nprobe 256, rerank 10,0000.87000.86750.00410.842711.923,65012.0015.2512.055
IVF, RaBitQ + 4-bit rescore5,000nprobe 256, rerank 20,0000.93350.93230.00230.919813.703,16913.8517.2613.884
IVF, RaBitQ + 4-bit rescore5,000nprobe 256, rerank 40,0000.94740.94670.00140.939917.242,50917.4921.1917.536
IVF, RaBitQ + 4-bit rescore5,000nprobe 512, rerank 10,0000.87000.86750.00410.842821.402,03821.6227.0521.590
IVF, RaBitQ + 4-bit rescore5,000nprobe 512, rerank 20,0000.93350.93240.00230.920223.231,87823.4628.8423.428
IVF, RaBitQ + 4-bit rescore5,000nprobe 512, rerank 40,0000.94740.94680.00140.940526.801,62227.1732.5827.135
IVF, PQ + SQ8 rescore10nprobe 32, rerank 2000.57940.57640.01190.65201.1834,9291.222.231.260
IVF, PQ + SQ8 rescore10nprobe 64, rerank 2000.57950.57650.01190.66062.1019,9192.163.252.209
IVF, PQ + SQ8 rescore10nprobe 128, rerank 2000.57940.57650.01190.66453.8810,7544.065.734.091
IVF, PQ + SQ8 rescore10nprobe 256, rerank 2000.57930.57640.01190.66537.475,6407.7510.137.801
IVF, PQ + SQ8 rescore10nprobe 512, rerank 2000.57930.57640.01190.665514.682,88415.2419.4615.256
IVF, PQ + SQ8 rescore100nprobe 32, rerank 2000.41810.41390.00910.43671.1834,8021.222.241.264
IVF, PQ + SQ8 rescore100nprobe 32, rerank 4000.56260.55630.01020.57601.2233,6891.262.291.306
IVF, PQ + SQ8 rescore100nprobe 32, rerank 8000.69270.68650.01000.70521.2831,9521.332.381.377
IVF, PQ + SQ8 rescore100nprobe 64, rerank 2000.41810.41380.00910.44082.0919,8422.173.272.218
IVF, PQ + SQ8 rescore100nprobe 64, rerank 4000.56270.55640.01020.58172.1319,5652.213.292.249
IVF, PQ + SQ8 rescore100nprobe 64, rerank 8000.69260.68660.01000.71222.2018,8852.293.392.330
IVF, PQ + SQ8 rescore100nprobe 128, rerank 2000.41810.41380.00910.44273.8210,7964.045.694.076
IVF, PQ + SQ8 rescore100nprobe 128, rerank 4000.56270.55640.01020.58443.8610,6834.095.724.119
IVF, PQ + SQ8 rescore100nprobe 128, rerank 8000.69260.68660.01000.71573.9510,4524.185.844.210
IVF, PQ + SQ8 rescore100nprobe 256, rerank 2000.41810.41380.00910.44307.395,6607.7210.087.773
IVF, PQ + SQ8 rescore100nprobe 256, rerank 4000.56270.55640.01020.58517.465,6247.7710.127.823
IVF, PQ + SQ8 rescore100nprobe 256, rerank 8000.69260.68660.01000.71657.575,5487.8910.267.930
IVF, PQ + SQ8 rescore100nprobe 512, rerank 2000.41810.41380.00910.443314.532,87415.2919.5315.309
IVF, PQ + SQ8 rescore100nprobe 512, rerank 4000.56270.55640.01020.585414.592,88815.2219.3815.238
IVF, PQ + SQ8 rescore100nprobe 512, rerank 8000.69260.68660.01000.716914.742,86915.3119.4915.335
IVF, PQ + SQ8 rescore1,000nprobe 32, rerank 2,0000.66450.66310.00840.63341.4927,6621.552.621.591
IVF, PQ + SQ8 rescore1,000nprobe 32, rerank 4,0000.81080.80950.00790.78321.7923,2131.852.981.895
IVF, PQ + SQ8 rescore1,000nprobe 32, rerank 8,0000.89470.89300.00650.88082.3917,6562.443.662.492
IVF, PQ + SQ8 rescore1,000nprobe 64, rerank 2,0000.66440.66300.00840.63682.4017,2832.503.632.546
IVF, PQ + SQ8 rescore1,000nprobe 64, rerank 4,0000.81080.80950.00790.78852.6815,4822.793.982.842
IVF, PQ + SQ8 rescore1,000nprobe 64, rerank 8,0000.89480.89310.00650.88793.2612,7553.404.683.450
IVF, PQ + SQ8 rescore1,000nprobe 128, rerank 2,0000.66440.66300.00840.63834.189,9494.396.044.422
IVF, PQ + SQ8 rescore1,000nprobe 128, rerank 4,0000.81090.80950.00790.79104.469,3244.696.384.719
IVF, PQ + SQ8 rescore1,000nprobe 128, rerank 8,0000.89480.89320.00650.89135.028,2585.297.125.328
IVF, PQ + SQ8 rescore1,000nprobe 256, rerank 2,0000.66440.66300.00840.63887.785,4048.1010.468.143
IVF, PQ + SQ8 rescore1,000nprobe 256, rerank 4,0000.81090.80960.00790.79197.995,2038.4210.768.457
IVF, PQ + SQ8 rescore1,000nprobe 256, rerank 8,0000.89490.89320.00650.89258.584,8619.0111.419.051
IVF, PQ + SQ8 rescore1,000nprobe 512, rerank 2,0000.66440.66300.00840.639014.822,83015.5419.7215.548
IVF, PQ + SQ8 rescore1,000nprobe 512, rerank 4,0000.81090.80960.00790.792315.092,76815.8720.3215.895
IVF, PQ + SQ8 rescore1,000nprobe 512, rerank 8,0000.89490.89330.00650.893115.802,66916.5020.5816.483
IVF, PQ + SQ8 rescore5,000nprobe 32, rerank 10,0000.81140.80570.00660.77922.7315,2362.844.092.888
IVF, PQ + SQ8 rescore5,000nprobe 32, rerank 20,0000.91800.91400.00520.89584.1010,1754.295.674.324
IVF, PQ + SQ8 rescore5,000nprobe 32, rerank 40,0000.95870.95660.00340.94506.866,0587.238.797.263
IVF, PQ + SQ8 rescore5,000nprobe 64, rerank 10,0000.81130.80560.00660.78353.6511,3963.825.133.861
IVF, PQ + SQ8 rescore5,000nprobe 64, rerank 20,0000.91840.91440.00530.90335.028,2665.276.775.323
IVF, PQ + SQ8 rescore5,000nprobe 64, rerank 40,0000.95950.95750.00350.95527.815,2978.279.998.306
IVF, PQ + SQ8 rescore5,000nprobe 128, rerank 10,0000.81130.80560.00660.78545.437,6035.757.625.787
IVF, PQ + SQ8 rescore5,000nprobe 128, rerank 20,0000.91860.91470.00530.90666.826,0707.219.287.249
IVF, PQ + SQ8 rescore5,000nprobe 128, rerank 40,0000.95970.95770.00360.95979.614,28610.2412.5010.265
IVF, PQ + SQ8 rescore5,000nprobe 256, rerank 10,0000.81140.80570.00660.78628.994,6439.4411.859.477
IVF, PQ + SQ8 rescore5,000nprobe 256, rerank 20,0000.91870.91480.00530.907810.453,98911.0013.5411.029
IVF, PQ + SQ8 rescore5,000nprobe 256, rerank 40,0000.95980.95790.00360.961413.233,12214.0616.7414.093
IVF, PQ + SQ8 rescore5,000nprobe 512, rerank 10,0000.81140.80570.00660.786516.182,59916.9521.0116.926
IVF, PQ + SQ8 rescore5,000nprobe 512, rerank 20,0000.91880.91490.00530.908417.642,36918.6022.7518.575
IVF, PQ + SQ8 rescore5,000nprobe 512, rerank 40,0000.95990.95800.00360.962220.432,02921.7125.8921.682
Builds
RunIndexCodeCells or linksBuild sCPU sHeap GB
IVF, SQ8, 16,384 cellsivfsq816,384196.48,38114.12
IVF, SQ8, plain k-meansivfsq816,384187.27,98514.13
exact-fp32flatfp32146.711752.49
IVF, plain k-meansivffp3216,384196.07,89752.53
IVFivffp3216,384199.88,16052.52
exact scan, SQ8flatsq8129.211314.09
IVF, SQ8ivfsq865,536754.832,76014.15
IVF, LVQ8ivflvq816,384216.67,92614.53
IVF, TQ8ivftq816,384914.58,64714.13
IVF, RaBitQ + 4-bit rescoreivfrabitq-erabitq16,384187.07,99110.33
IVF, PQ + SQ8 rescoreivfpqfs16,384197.47,94917.33
HNSWhnswfp32 + SQ8M 16, ef_construct 2001,222.347,71433.75
IVF, SQ8 + rerank, 16,384 cellsivfsq8-fp3216,384207.58,35265.32
IVF, SQ8 + rerankivfsq8-fp3265,536761.532,68765.35
exact scanflatfp32133.210152.49

Heap is the growth in the process’s anonymous memory across the build. The HNSW figure includes link lists the build freed and the allocator kept.

Every served measurement
ServerKSettingClientsRecallQPSp50 msp99 msServer CPU ms/qResponse bytes
ivf-sq8-aniso4-nl65536-rr2-ours108, rerank 20010.98879421.061.281.064282
ivf-sq8-aniso4-nl65536-rr2-ours108, rerank 200110.988710,3621.061.281.061282
ivf-sq8-aniso4-nl65536-rr2-ours108, rerank 200440.988733,2301.143.181.078282
ivf-sq8-aniso4-nl65536-rr2-ours108, rerank 200880.988738,0702.066.191.065282
ivf-sq8-aniso4-nl65536-rr2-ours108, rerank 2001760.988741,1963.8810.891.067282
ivf-sq8-aniso4-nl65536-rr2-ours1016, rerank 20010.99427591.311.601.321282
ivf-sq8-aniso4-nl65536-rr2-ours1016, rerank 200110.99428,3491.311.601.318282
ivf-sq8-aniso4-nl65536-rr2-ours1016, rerank 200440.994227,1111.433.681.340282
ivf-sq8-aniso4-nl65536-rr2-ours1016, rerank 200880.994231,1532.577.291.325282
ivf-sq8-aniso4-nl65536-rr2-ours1016, rerank 2001760.994233,0834.8611.931.329282
ivf-sq8-aniso4-nl65536-rr2-ours1024, rerank 20010.99566381.561.931.574282
ivf-sq8-aniso4-nl65536-rr2-ours1024, rerank 200110.99567,0111.561.931.569282
ivf-sq8-aniso4-nl65536-rr2-ours1024, rerank 200440.995622,4141.724.321.603282
ivf-sq8-aniso4-nl65536-rr2-ours1024, rerank 200880.995626,3253.008.601.582282
ivf-sq8-aniso4-nl65536-rr2-ours1024, rerank 2001760.995627,6855.9712.491.589282
ivf-sq8-aniso4-nl65536-rr2-ours1032, rerank 20010.99645531.802.221.814282
ivf-sq8-aniso4-nl65536-rr2-ours1032, rerank 200110.99646,0741.802.231.811282
ivf-sq8-aniso4-nl65536-rr2-ours1032, rerank 200440.996419,7761.984.601.850282
ivf-sq8-aniso4-nl65536-rr2-ours1032, rerank 200880.996422,7863.459.311.835282
ivf-sq8-aniso4-nl65536-rr2-ours1032, rerank 2001760.996423,8646.8513.471.842282
ivf-sq8-aniso4-nl65536-rr2-ours1048, rerank 20010.99694382.272.812.291282
ivf-sq8-aniso4-nl65536-rr2-ours1048, rerank 200110.99694,8032.282.822.291282
ivf-sq8-aniso4-nl65536-rr2-ours1048, rerank 200440.996915,7782.535.332.348282
ivf-sq8-aniso4-nl65536-rr2-ours1048, rerank 200880.996917,9954.3510.792.334282
ivf-sq8-aniso4-nl65536-rr2-ours1048, rerank 2001760.996918,7799.0015.042.342282
ivf-sq8-aniso4-nl65536-rr2-ours1008, rerank 20010.97709321.071.291.0752,014
ivf-sq8-aniso4-nl65536-rr2-ours1008, rerank 200110.977010,2591.071.291.0722,014
ivf-sq8-aniso4-nl65536-rr2-ours1008, rerank 200440.977032,9021.153.201.0892,014
ivf-sq8-aniso4-nl65536-rr2-ours1008, rerank 200880.977037,7942.076.251.0752,014
ivf-sq8-aniso4-nl65536-rr2-ours1008, rerank 2001760.977040,6543.9510.871.0812,014
ivf-sq8-aniso4-nl65536-rr2-ours10016, rerank 20010.98907531.321.611.3302,014
ivf-sq8-aniso4-nl65536-rr2-ours10016, rerank 200110.98908,2851.321.611.3282,014
ivf-sq8-aniso4-nl65536-rr2-ours10016, rerank 200440.989026,8951.443.671.3512,014
ivf-sq8-aniso4-nl65536-rr2-ours10016, rerank 200880.989030,8722.607.301.3362,014
ivf-sq8-aniso4-nl65536-rr2-ours10016, rerank 2001760.989032,7984.9611.881.3412,014
ivf-sq8-aniso4-nl65536-rr2-ours10024, rerank 20010.99186351.571.941.5792,014
ivf-sq8-aniso4-nl65536-rr2-ours10024, rerank 200110.99186,9761.571.941.5762,014
ivf-sq8-aniso4-nl65536-rr2-ours10024, rerank 200440.991822,3701.724.341.6102,014
ivf-sq8-aniso4-nl65536-rr2-ours10024, rerank 200880.991826,1453.008.661.5922,014
ivf-sq8-aniso4-nl65536-rr2-ours10024, rerank 2001760.991827,5025.9312.721.5992,014
ivf-sq8-aniso4-nl65536-rr2-ours10032, rerank 20010.99315501.812.241.8242,014
ivf-sq8-aniso4-nl65536-rr2-ours10032, rerank 200110.99316,0421.812.241.8202,014
ivf-sq8-aniso4-nl65536-rr2-ours10032, rerank 200440.993119,6572.004.601.8602,014
ivf-sq8-aniso4-nl65536-rr2-ours10032, rerank 200880.993122,6803.479.311.8452,014
ivf-sq8-aniso4-nl65536-rr2-ours10032, rerank 2001760.993123,7326.9313.781.8532,014
ivf-sq8-aniso4-nl65536-rr2-ours10048, rerank 20010.99414362.292.822.3032,014
ivf-sq8-aniso4-nl65536-rr2-ours10048, rerank 200110.99414,7662.302.842.3082,014
ivf-sq8-aniso4-nl65536-rr2-ours10048, rerank 200440.994115,6922.545.332.3592,014
ivf-sq8-aniso4-nl65536-rr2-ours10048, rerank 200880.994117,9584.3710.742.3452,014
ivf-sq8-aniso4-nl65536-rr2-ours10048, rerank 2001760.994118,6859.1414.992.3552,014
ivf-sq8-aniso4-nl65536-rr2-ours10064, rerank 20010.99463612.763.382.7802,014
ivf-sq8-aniso4-nl65536-rr2-ours10064, rerank 200110.99463,9662.773.392.7742,014
ivf-sq8-aniso4-nl65536-rr2-ours10064, rerank 200440.994612,5993.106.472.8602,014
ivf-sq8-aniso4-nl65536-rr2-ours10064, rerank 200880.994614,8195.3912.022.8392,014
ivf-sq8-aniso4-nl65536-rr2-ours10064, rerank 2001760.994615,45811.2916.992.8462,014
ivf-sq8-aniso4-nl65536-rr2-ours1,00016, rerank 2,00010.98206131.631.931.63819,319
ivf-sq8-aniso4-nl65536-rr2-ours1,00016, rerank 2,000110.98206,7161.631.941.63819,319
ivf-sq8-aniso4-nl65536-rr2-ours1,00016, rerank 2,000440.982021,2321.814.481.70619,319
ivf-sq8-aniso4-nl65536-rr2-ours1,00016, rerank 2,000880.982024,8793.118.981.68219,319
ivf-sq8-aniso4-nl65536-rr2-ours1,00016, rerank 2,0001760.982025,9666.2712.991.69419,319
ivf-sq8-aniso4-nl65536-rr2-ours1,00024, rerank 2,00010.99075311.882.271.88819,319
ivf-sq8-aniso4-nl65536-rr2-ours1,00024, rerank 2,000110.99075,8251.882.281.88919,319
ivf-sq8-aniso4-nl65536-rr2-ours1,00024, rerank 2,000440.990718,7762.094.721.96219,319
ivf-sq8-aniso4-nl65536-rr2-ours1,00024, rerank 2,000880.990721,4363.739.701.96019,319
ivf-sq8-aniso4-nl65536-rr2-ours1,00024, rerank 2,0001760.990722,4197.3013.981.96219,319
ivf-sq8-aniso4-nl65536-rr2-ours1,00032, rerank 2,00010.99434702.122.572.13719,319
ivf-sq8-aniso4-nl65536-rr2-ours1,00032, rerank 2,000110.99435,1472.132.592.13819,319
ivf-sq8-aniso4-nl65536-rr2-ours1,00032, rerank 2,000440.994316,6812.365.092.21819,319
ivf-sq8-aniso4-nl65536-rr2-ours1,00032, rerank 2,000880.994319,0894.0410.242.20119,319
ivf-sq8-aniso4-nl65536-rr2-ours1,00032, rerank 2,0001760.994319,8408.7114.002.21819,319
ivf-sq8-aniso4-nl65536-rr2-ours1,00048, rerank 2,00010.99703832.603.162.62019,319
ivf-sq8-aniso4-nl65536-rr2-ours1,00048, rerank 2,000110.99704,2072.603.182.61519,319
ivf-sq8-aniso4-nl65536-rr2-ours1,00048, rerank 2,000440.997013,5242.926.092.72419,319
ivf-sq8-aniso4-nl65536-rr2-ours1,00048, rerank 2,000880.997015,5755.0311.612.70619,319
ivf-sq8-aniso4-nl65536-rr2-ours1,00048, rerank 2,0001760.997016,18610.7416.372.71819,319
ivf-sq8-aniso4-nl65536-rr2-ours1,00064, rerank 2,00010.99803253.073.713.09219,319
ivf-sq8-aniso4-nl65536-rr2-ours1,00064, rerank 2,000110.99803,5643.083.723.08719,319
ivf-sq8-aniso4-nl65536-rr2-ours1,00064, rerank 2,000440.998010,8563.537.243.23419,319
ivf-sq8-aniso4-nl65536-rr2-ours1,00064, rerank 2,000880.998013,2176.0613.743.20019,319
ivf-sq8-aniso4-nl65536-rr2-ours1,00064, rerank 2,0001760.998013,69512.9217.983.21319,319
ivf-sq8-aniso4-nl65536-rr2-ours1,00096, rerank 2,00010.99882484.034.824.06019,319
ivf-sq8-aniso4-nl65536-rr2-ours1,00096, rerank 2,000110.99882,7334.024.804.02519,319
ivf-sq8-aniso4-nl65536-rr2-ours1,00096, rerank 2,000440.99889,0264.488.364.18719,319
ivf-sq8-aniso4-nl65536-rr2-ours1,00096, rerank 2,000880.998810,2038.3116.404.18519,319
ivf-sq8-aniso4-nl65536-rr2-ours1,00096, rerank 2,0001760.998810,49116.4626.014.19219,319
ivf-sq8-aniso4-nl65536-rr2-ours5,00024, rerank 10,00010.97093143.183.623.19096,226
ivf-sq8-aniso4-nl65536-rr2-ours5,00024, rerank 10,000110.97093,4313.203.663.20596,226
ivf-sq8-aniso4-nl65536-rr2-ours5,00024, rerank 10,000440.970910,1713.877.643.66796,226
ivf-sq8-aniso4-nl65536-rr2-ours5,00024, rerank 10,000880.970911,9637.0314.053.55696,226
ivf-sq8-aniso4-nl65536-rr2-ours5,00024, rerank 10,0001760.970912,38114.0323.433.55396,226
ivf-sq8-aniso4-nl65536-rr2-ours5,00032, rerank 10,00010.98292903.453.963.46396,226
ivf-sq8-aniso4-nl65536-rr2-ours5,00032, rerank 10,000110.98293,1773.463.983.46196,226
ivf-sq8-aniso4-nl65536-rr2-ours5,00032, rerank 10,000440.98299,6434.138.013.90996,226
ivf-sq8-aniso4-nl65536-rr2-ours5,00032, rerank 10,000880.982911,1377.6415.033.82396,226
ivf-sq8-aniso4-nl65536-rr2-ours5,00032, rerank 10,0001760.982911,50415.2220.623.82596,226
ivf-sq8-aniso4-nl65536-rr2-ours5,00048, rerank 10,00010.99222543.924.583.95096,226
ivf-sq8-aniso4-nl65536-rr2-ours5,00048, rerank 10,000110.99222,7813.944.603.95596,226
ivf-sq8-aniso4-nl65536-rr2-ours5,00048, rerank 10,000440.99228,5794.708.714.42596,226
ivf-sq8-aniso4-nl65536-rr2-ours5,00048, rerank 10,000880.99229,8558.6816.914.33096,226
ivf-sq8-aniso4-nl65536-rr2-ours5,00048, rerank 10,0001760.992210,16416.9926.744.32796,226
ivf-sq8-aniso4-nl65536-rr2-ours5,00064, rerank 10,00010.99562274.405.104.42996,226
ivf-sq8-aniso4-nl65536-rr2-ours5,00064, rerank 10,000110.99562,4834.425.134.43096,226
ivf-sq8-aniso4-nl65536-rr2-ours5,00064, rerank 10,000440.99567,8805.169.294.86096,226
ivf-sq8-aniso4-nl65536-rr2-ours5,00064, rerank 10,000880.99568,8849.6318.574.82596,226
ivf-sq8-aniso4-nl65536-rr2-ours5,00064, rerank 10,0001760.99569,12118.9328.114.82396,226
ivf-sq8-aniso4-nl65536-rr2-ours5,00096, rerank 10,00010.99801875.346.185.36996,226
ivf-sq8-aniso4-nl65536-rr2-ours5,00096, rerank 10,000110.99802,0485.366.225.37296,226
ivf-sq8-aniso4-nl65536-rr2-ours5,00096, rerank 10,000440.99806,6216.2210.515.81196,226
ivf-sq8-aniso4-nl65536-rr2-ours5,00096, rerank 10,000880.99807,42011.7920.745.80796,226
ivf-sq8-aniso4-nl65536-rr2-ours5,00096, rerank 10,0001760.99807,58023.1431.965.80496,226
ivf-sq8-aniso4-nl65536-rr2-ours5,000128, rerank 10,00010.99881606.257.216.28996,226
ivf-sq8-aniso4-nl65536-rr2-ours5,000128, rerank 10,000110.99881,7456.297.306.30396,226
ivf-sq8-aniso4-nl65536-rr2-ours5,000128, rerank 10,000440.99885,7837.2111.986.75496,226
ivf-sq8-aniso4-nl65536-rr2-ours5,000128, rerank 10,000880.99886,40413.9922.616.77696,226
ivf-sq8-aniso4-nl65536-rr2-ours5,000128, rerank 10,0001760.99886,46027.0839.366.81196,226
ivf-sq8-aniso4-nl65536-rr2-ours-bin108, rerank 20010.98879411.061.281.065124
ivf-sq8-aniso4-nl65536-rr2-ours-bin108, rerank 200110.988710,3671.061.281.061124
ivf-sq8-aniso4-nl65536-rr2-ours-bin108, rerank 200440.988733,3201.143.161.077124
ivf-sq8-aniso4-nl65536-rr2-ours-bin108, rerank 200880.988738,0662.066.231.064124
ivf-sq8-aniso4-nl65536-rr2-ours-bin108, rerank 2001760.988741,2483.9110.701.066124
ivf-sq8-aniso4-nl65536-rr2-ours-bin1016, rerank 20010.99427591.311.601.322124
ivf-sq8-aniso4-nl65536-rr2-ours-bin1016, rerank 200110.99428,3571.311.601.316124
ivf-sq8-aniso4-nl65536-rr2-ours-bin1016, rerank 200440.994227,2061.433.671.339124
ivf-sq8-aniso4-nl65536-rr2-ours-bin1016, rerank 200880.994231,0602.587.241.325124
ivf-sq8-aniso4-nl65536-rr2-ours-bin1016, rerank 2001760.994233,0844.9611.681.330124
ivf-sq8-aniso4-nl65536-rr2-ours-bin10016, rerank 20010.98907571.321.601.3241,204
ivf-sq8-aniso4-nl65536-rr2-ours-bin10016, rerank 200110.98908,3281.321.601.3201,204
ivf-sq8-aniso4-nl65536-rr2-ours-bin10016, rerank 200440.989027,0871.433.651.3431,204
ivf-sq8-aniso4-nl65536-rr2-ours-bin10016, rerank 200880.989031,0512.587.271.3291,204
ivf-sq8-aniso4-nl65536-rr2-ours-bin10016, rerank 2001760.989032,9644.8812.031.3341,204
ivf-sq8-aniso4-nl65536-rr2-ours-bin10032, rerank 20010.99315521.802.221.8191,204
ivf-sq8-aniso4-nl65536-rr2-ours-bin10032, rerank 200110.99316,0471.812.241.8191,204
ivf-sq8-aniso4-nl65536-rr2-ours-bin10032, rerank 200440.993119,7731.994.551.8531,204
ivf-sq8-aniso4-nl65536-rr2-ours-bin10032, rerank 200880.993122,6993.479.291.8391,204
ivf-sq8-aniso4-nl65536-rr2-ours-bin10032, rerank 2001760.993123,8196.9313.351.8471,204
ivf-sq8-aniso4-nl65536-rr2-ours-bin1,00032, rerank 2,00010.99434852.052.512.07212,004
ivf-sq8-aniso4-nl65536-rr2-ours-bin1,00032, rerank 2,000110.99435,3142.062.522.07112,004
ivf-sq8-aniso4-nl65536-rr2-ours-bin1,00032, rerank 2,000440.994317,1882.304.992.15312,004
ivf-sq8-aniso4-nl65536-rr2-ours-bin1,00032, rerank 2,000880.994319,6454.0010.052.14012,004
ivf-sq8-aniso4-nl65536-rr2-ours-bin1,00032, rerank 2,0001760.994320,4268.2814.052.15412,004
ivf-sq8-aniso4-nl65536-rr2-ours-bin1,00064, rerank 2,00010.99803323.013.643.02912,004
ivf-sq8-aniso4-nl65536-rr2-ours-bin1,00064, rerank 2,000110.99803,6403.013.663.02312,004
ivf-sq8-aniso4-nl65536-rr2-ours-bin1,00064, rerank 2,000440.998011,0593.467.133.16712,004
ivf-sq8-aniso4-nl65536-rr2-ours-bin1,00064, rerank 2,000880.998013,4256.0113.453.14012,004
ivf-sq8-aniso4-nl65536-rr2-ours-bin1,00064, rerank 2,0001760.998013,96312.6517.853.15112,004
ivf-sq8-aniso4-nl65536-rr2-ours-bin5,00048, rerank 10,00010.99222783.594.243.61960,004
ivf-sq8-aniso4-nl65536-rr2-ours-bin5,00048, rerank 10,000110.99223,0253.634.283.63560,004
ivf-sq8-aniso4-nl65536-rr2-ours-bin5,00048, rerank 10,000440.99229,2674.348.304.09660,004
ivf-sq8-aniso4-nl65536-rr2-ours-bin5,00048, rerank 10,000880.992210,5148.0415.994.06660,004
ivf-sq8-aniso4-nl65536-rr2-ours-bin5,00048, rerank 10,0001760.992210,86115.9725.554.05160,004
ivf-sq8-aniso4-nl65536-rr2-ours-bin5,00096, rerank 10,00010.99801995.015.875.03960,004
ivf-sq8-aniso4-nl65536-rr2-ours-bin5,00096, rerank 10,000110.99802,1785.045.905.05160,004
ivf-sq8-aniso4-nl65536-rr2-ours-bin5,00096, rerank 10,000440.99807,0025.8810.125.52360,004
ivf-sq8-aniso4-nl65536-rr2-ours-bin5,00096, rerank 10,000880.99807,81411.0020.015.52260,004
ivf-sq8-aniso4-nl65536-rr2-ours-bin5,00096, rerank 10,0001760.99807,96821.9830.635.52160,004
qdrant-hnsw-ignore101610.86844,0230.240.370.404546
qdrant-hnsw-ignore1016110.868436,4360.270.730.445546
qdrant-hnsw-ignore1016440.868448,1510.832.320.548546
qdrant-hnsw-ignore1016880.868448,4641.684.410.520546
qdrant-hnsw-ignore10161760.868410,5847.1495.411.633546
qdrant-hnsw-ignore103210.90073,4500.280.450.484546
qdrant-hnsw-ignore1032110.900731,3490.320.780.538546
qdrant-hnsw-ignore1032440.900746,6080.872.320.641546
qdrant-hnsw-ignore1032880.900746,8011.734.590.615546
qdrant-hnsw-ignore10321760.90078,3159.12121.962.042546
qdrant-hnsw-ignore106410.92202,8100.340.600.615546
qdrant-hnsw-ignore1064110.922026,0100.390.840.679546
qdrant-hnsw-ignore1064440.922042,0950.972.440.803546
qdrant-hnsw-ignore1064880.922032,7752.0224.090.868546
qdrant-hnsw-ignore10641760.92207,20710.37139.782.406546
qdrant-hnsw-ignore1012810.93662,0930.460.780.850546
qdrant-hnsw-ignore10128110.936620,0700.520.980.926546
qdrant-hnsw-ignore10128440.936634,1681.202.891.057546
qdrant-hnsw-ignore10128880.936618,7992.8248.671.330546
qdrant-hnsw-ignore101281760.93666,04211.60175.602.873546
qdrant-hnsw-ignore1025610.94631,4500.671.121.269546
qdrant-hnsw-ignore10256110.946314,3360.731.281.358546
qdrant-hnsw-ignore10256440.946324,2001.694.091.517546
qdrant-hnsw-ignore10256880.946312,1734.1160.251.984546
qdrant-hnsw-ignore102561760.94635,16413.41244.473.480546
qdrant-hnsw-ignore1051210.95399341.031.742.006546
qdrant-hnsw-ignore10512110.95399,4561.121.892.138546
qdrant-hnsw-ignore10512440.953915,9742.556.372.347546
qdrant-hnsw-ignore10512880.95398,5616.1172.892.918546
qdrant-hnsw-ignore105121760.95394,54815.08299.664.211546
qdrant-hnsw-ignore10010010.92301,4700.670.971.2165,056
qdrant-hnsw-ignore100100110.923014,8980.711.151.2715,056
qdrant-hnsw-ignore100100440.923026,6021.553.651.4085,056
qdrant-hnsw-ignore100100880.923022,4013.2425.381.5165,056
qdrant-hnsw-ignore1001001760.92306,90912.14165.423.0075,056
qdrant-hnsw-ignore10020010.93921,1600.841.231.5665,056
qdrant-hnsw-ignore100200110.939211,8720.901.371.6425,056
qdrant-hnsw-ignore100200440.939220,8361.994.641.8125,056
qdrant-hnsw-ignore100200880.939215,0934.3044.052.0535,056
qdrant-hnsw-ignore1002001760.93925,92113.47211.273.5905,056
qdrant-hnsw-ignore10040010.94978451.151.772.1945,056
qdrant-hnsw-ignore100400110.94978,7541.221.882.2895,056
qdrant-hnsw-ignore100400440.949715,1642.716.552.5015,056
qdrant-hnsw-ignore100400880.949710,7615.9854.812.8415,056
qdrant-hnsw-ignore1004001760.94974,56516.46286.914.6415,056
qdrant-hnsw-ignore10080010.95675761.692.683.3085,056
qdrant-hnsw-ignore100800110.95675,9461.802.853.4495,056
qdrant-hnsw-ignore100800440.956710,2174.019.803.7335,056
qdrant-hnsw-ignore100800880.95676,8298.9879.104.3315,056
qdrant-hnsw-ignore1008001760.95674,14019.47331.835.6495,056
qdrant-hnsw-ignore100160010.96253582.724.305.3725,056
qdrant-hnsw-ignore1001600110.96253,7302.874.525.6025,056
qdrant-hnsw-ignore1001600440.96256,4496.3815.455.9805,056
qdrant-hnsw-ignore1001600880.96254,67314.0097.526.6405,056
qdrant-hnsw-ignore10016001760.96253,91326.79362.147.3825,056
qdrant-hnsw-ignore1,000100010.95362294.315.448.15850,158
qdrant-hnsw-ignore1,0001000110.95362,4514.435.608.21550,158
qdrant-hnsw-ignore1,0001000440.95364,5199.2120.248.68450,158
qdrant-hnsw-ignore1,0001000880.95364,33318.6755.808.74850,158
qdrant-hnsw-ignore1,00010001760.95365,09234.3938.978.49550,158
qdrant-hnsw-ignore1,000200010.96141755.617.4610.70450,158
qdrant-hnsw-ignore1,0002000110.96141,8865.757.7010.87450,158
qdrant-hnsw-ignore1,0002000440.96143,84011.3015.6011.42350,158
qdrant-hnsw-ignore1,0002000880.96143,85022.7627.0411.38950,158
qdrant-hnsw-ignore1,00020001760.96143,85445.5550.0111.36850,158
qdrant-hnsw-ignore1,000400010.96651228.0610.9915.59950,158
qdrant-hnsw-ignore1,0004000110.96651,3108.2811.3215.95450,158
qdrant-hnsw-ignore1,0004000440.96652,61416.7121.7516.81650,158
qdrant-hnsw-ignore1,0004000880.96652,61833.4538.8216.79150,158
qdrant-hnsw-ignore1,00040001760.96652,62266.9972.5216.76150,158
qdrant-hnsw-ignore1,000800010.96907613.0418.0325.38650,158
qdrant-hnsw-ignore1,0008000110.969082213.2618.1725.81850,158
qdrant-hnsw-ignore1,0008000440.96901,61427.0634.4827.23950,158
qdrant-hnsw-ignore1,0008000880.96901,61254.4361.5927.28650,158
qdrant-hnsw-ignore1,00080001760.96901,609109.18118.3427.33550,158
qdrant-hnsw-ignore5,000500010.96555219.2323.5035.925250,622
qdrant-hnsw-ignore5,0005000110.965557618.9622.6135.121250,622
qdrant-hnsw-ignore5,0005000440.96551,19036.7746.8236.923250,622
qdrant-hnsw-ignore5,0005000880.96551,19273.3388.0236.873250,622
qdrant-hnsw-ignore5,00050001760.96551,189147.04170.3036.916250,622
qdrant-hnsw-ignore5,000800010.96794323.3328.9844.132250,622
qdrant-hnsw-ignore5,0008000110.967948022.7728.0642.687250,622
qdrant-hnsw-ignore5,0008000440.967997544.7761.0444.939250,622
qdrant-hnsw-ignore5,0008000880.967997989.40105.8044.905250,622
qdrant-hnsw-ignore5,00080001760.9679978179.07203.9844.946250,622
qdrant-hnsw-ignore5,0001200010.96973528.3835.9554.218250,622
qdrant-hnsw-ignore5,00012000110.969739227.9235.0252.880250,622
qdrant-hnsw-ignore5,00012000440.969779555.0270.0355.354250,622
qdrant-hnsw-ignore5,00012000880.9697793110.47127.9555.413250,622
qdrant-hnsw-ignore5,000120001760.9697794220.91246.8955.386250,622
qdrant-hnsw-ignore5,0001600010.97153033.4843.5264.005250,622
qdrant-hnsw-ignore5,00016000110.971533133.0141.7162.963250,622
qdrant-hnsw-ignore5,00016000440.971567065.3083.7065.647250,622
qdrant-hnsw-ignore5,00016000880.9715670131.01149.6665.669250,622
qdrant-hnsw-ignore5,000160001760.9715669262.37290.9265.719250,622
qdrant-hnsw-ignore5,0002400010.97352441.8452.0380.812250,622
qdrant-hnsw-ignore5,00024000110.973525742.5254.2781.995250,622
qdrant-hnsw-ignore5,00024000440.973551185.57114.0785.958250,622
qdrant-hnsw-ignore5,00024000880.9735511172.01193.9986.118250,622
qdrant-hnsw-ignore5,000240001760.9735510344.12402.5086.296250,622
qdrant-hnsw-rescore101610.86564,1600.230.350.393546
qdrant-hnsw-rescore1016110.865637,3610.260.700.438546
qdrant-hnsw-rescore1016440.865649,0760.822.260.553546
qdrant-hnsw-rescore1016880.865648,2451.664.440.533546
qdrant-hnsw-rescore10161760.86569,5857.9499.951.797546
qdrant-hnsw-rescore103210.88013,5500.270.440.466546
qdrant-hnsw-rescore1032110.880132,3630.310.750.519546
qdrant-hnsw-rescore1032440.880148,0760.842.250.613546
qdrant-hnsw-rescore1032880.880148,2211.684.430.587546
qdrant-hnsw-rescore10321760.88018,6908.62123.141.961546
qdrant-hnsw-rescore106410.89872,9330.330.570.583546
qdrant-hnsw-rescore1064110.898727,4380.370.800.639546
qdrant-hnsw-rescore1064440.898744,2010.922.340.754546
qdrant-hnsw-rescore1064880.898739,1001.866.990.773546
qdrant-hnsw-rescore10641760.89877,4719.64142.232.325546
qdrant-hnsw-rescore1012810.90962,2380.430.740.793546
qdrant-hnsw-rescore10128110.909621,5340.480.910.856546
qdrant-hnsw-rescore10128440.909636,7421.122.710.977546
qdrant-hnsw-rescore10128880.909618,7142.6848.811.274546
qdrant-hnsw-rescore101281760.90965,88211.62186.452.913546
qdrant-hnsw-rescore1025610.92041,5570.621.021.169546
qdrant-hnsw-rescore10256110.920415,6190.671.171.240546
qdrant-hnsw-rescore10256440.920426,9661.523.721.367546
qdrant-hnsw-rescore10256880.920412,9143.7862.561.834546
qdrant-hnsw-rescore102561760.92045,08312.88241.163.476546
qdrant-hnsw-rescore1051210.92721,0130.951.581.850546
qdrant-hnsw-rescore10512110.927210,3681.021.711.942546
qdrant-hnsw-rescore10512440.927217,8882.275.752.096546
qdrant-hnsw-rescore10512880.92729,1515.5070.892.696546
qdrant-hnsw-rescore105121760.92724,71813.77292.564.039546
qdrant-hnsw-rescore10010010.93581,1630.841.201.5705,056
qdrant-hnsw-rescore100100110.935812,0280.891.331.6205,056
qdrant-hnsw-rescore100100440.935821,3021.944.571.7735,056
qdrant-hnsw-rescore100100880.935816,2174.1640.041.9865,056
qdrant-hnsw-rescore1001001760.93585,32014.62223.403.8585,056
qdrant-hnsw-rescore10020010.93581,1710.831.181.5625,056
qdrant-hnsw-rescore100200110.935812,0240.891.331.6205,056
qdrant-hnsw-rescore100200440.935821,2821.944.591.7775,056
qdrant-hnsw-rescore100200880.935817,2094.0934.651.9345,056
qdrant-hnsw-rescore1002001760.93585,27714.90222.873.8995,056
qdrant-hnsw-rescore10040010.94588611.131.692.1635,056
qdrant-hnsw-rescore100400110.94589,0751.181.762.2045,056
qdrant-hnsw-rescore100400440.945815,8582.606.182.3935,056
qdrant-hnsw-rescore100400880.945811,1335.7158.732.7355,056
qdrant-hnsw-rescore1004001760.94585,06815.11270.824.3845,056
qdrant-hnsw-rescore10080010.95245971.632.493.1655,056
qdrant-hnsw-rescore100800110.95246,2911.702.603.2595,056
qdrant-hnsw-rescore100800440.952410,9623.749.233.4885,056
qdrant-hnsw-rescore100800880.95247,7828.2172.043.9395,056
qdrant-hnsw-rescore1008001760.95244,77917.45329.975.1085,056
qdrant-hnsw-rescore100160010.95713782.583.895.0985,056
qdrant-hnsw-rescore1001600110.95714,0242.674.035.1965,056
qdrant-hnsw-rescore1001600440.95717,0355.8514.355.4785,056
qdrant-hnsw-rescore1001600880.95715,19812.8491.376.0535,056
qdrant-hnsw-rescore10016001760.95713,60525.69360.477.1715,056
qdrant-hnsw-rescore1,000100010.96121685.877.5011.26650,158
qdrant-hnsw-rescore1,0001000110.96121,8185.987.6211.29750,158
qdrant-hnsw-rescore1,0001000440.96123,70411.7716.8811.81750,158
qdrant-hnsw-rescore1,0001000880.96123,77523.1427.4811.63450,158
qdrant-hnsw-rescore1,00010001760.96123,78346.3651.3511.60750,158
qdrant-hnsw-rescore1,000200010.96121675.907.5211.23150,158
qdrant-hnsw-rescore1,0002000110.96121,8305.947.5411.23150,158
qdrant-hnsw-rescore1,0002000440.96123,74911.5817.3711.66150,158
qdrant-hnsw-rescore1,0002000880.96123,77823.1127.4511.62950,158
qdrant-hnsw-rescore1,00020001760.96123,78546.3450.7711.60250,158
qdrant-hnsw-rescore1,000400010.96621238.0510.6415.58850,158
qdrant-hnsw-rescore1,0004000110.96621,3158.2710.9115.88050,158
qdrant-hnsw-rescore1,0004000440.96622,67416.2622.4216.39650,158
qdrant-hnsw-rescore1,0004000880.96622,68532.6437.8916.37350,158
qdrant-hnsw-rescore1,00040001760.96622,69165.2470.6416.34150,158
qdrant-hnsw-rescore1,000800010.96887912.5816.8324.56050,158
qdrant-hnsw-rescore1,0008000110.968885712.7516.9524.75550,158
qdrant-hnsw-rescore1,0008000440.96881,72425.3432.1825.51150,158
qdrant-hnsw-rescore1,0008000880.96881,72350.9457.6225.53850,158
qdrant-hnsw-rescore1,00080001760.96881,714102.53109.7825.66550,158
qdrant-hnsw-rescore5,000500010.96893627.3733.4352.088250,622
qdrant-hnsw-rescore5,0005000110.968941526.3131.5049.766250,622
qdrant-hnsw-rescore5,0005000440.968985051.4366.2251.724250,622
qdrant-hnsw-rescore5,0005000880.9689850102.97124.2751.735250,622
qdrant-hnsw-rescore5,00050001760.9689850206.08236.0951.773250,622
qdrant-hnsw-rescore5,000800010.96893627.3733.2152.015250,622
qdrant-hnsw-rescore5,0008000110.968941526.3731.7149.897250,622
qdrant-hnsw-rescore5,0008000440.968985051.4165.5651.746250,622
qdrant-hnsw-rescore5,0008000880.9689850103.05118.6051.762250,622
qdrant-hnsw-rescore5,00080001760.9689850206.17233.3951.732250,622
qdrant-hnsw-rescore5,0001200010.96963429.1535.6955.832250,622
qdrant-hnsw-rescore5,00012000110.969638228.6234.6454.330250,622
qdrant-hnsw-rescore5,00012000440.969678255.9971.0256.276250,622
qdrant-hnsw-rescore5,00012000880.9696781112.23129.0656.330250,622
qdrant-hnsw-rescore5,000120001760.9696781224.53252.9356.336250,622
qdrant-hnsw-rescore5,0001600010.97112934.2042.9565.826250,622
qdrant-hnsw-rescore5,00016000110.971133033.1741.0963.393250,622
qdrant-hnsw-rescore5,00016000440.971167364.9684.1565.283250,622
qdrant-hnsw-rescore5,00016000880.9711674130.00150.6465.296250,622
qdrant-hnsw-rescore5,000160001760.9711673260.03356.3865.333250,622
qdrant-hnsw-rescore5,0002400010.97332441.6350.9180.669250,622
qdrant-hnsw-rescore5,00024000110.973326141.9952.3180.817250,622
qdrant-hnsw-rescore5,00024000440.973352982.64101.7383.124250,622
qdrant-hnsw-rescore5,00024000880.9733529165.63199.7583.147250,622
qdrant-hnsw-rescore5,000240001760.9733529331.58394.2783.193250,622
qdrant-m16-efc200101610.90333,9810.240.380.412546
qdrant-m16-efc2001016110.903335,4380.280.740.462546
qdrant-m16-efc2001016440.903348,6560.832.260.569546
qdrant-m16-efc2001016880.903349,1271.664.340.541546
qdrant-m16-efc20010161760.903310,0597.54102.601.711546
qdrant-m16-efc200103210.93333,3380.290.490.506546
qdrant-m16-efc2001032110.933330,2730.330.780.563546
qdrant-m16-efc2001032440.933346,4550.872.300.672546
qdrant-m16-efc2001032880.933343,5271.755.150.672546
qdrant-m16-efc20010321760.93337,7809.56123.902.202546
qdrant-m16-efc200106410.95292,6490.360.660.657546
qdrant-m16-efc2001064110.952924,8340.410.860.719546
qdrant-m16-efc2001064440.952940,7451.002.480.850546
qdrant-m16-efc2001064880.952927,1062.2034.030.983546
qdrant-m16-efc20010641760.95296,78210.66149.022.528546
qdrant-m16-efc2001012810.96481,9900.480.830.907546
qdrant-m16-efc20010128110.964818,9670.551.020.990546
qdrant-m16-efc20010128440.964832,2351.283.071.127546
qdrant-m16-efc20010128880.964816,2943.1048.071.476546
qdrant-m16-efc200101281760.96485,73412.17205.283.028546
qdrant-m16-efc2001025610.97191,3680.711.201.357546
qdrant-m16-efc20010256110.971913,5040.781.351.456546
qdrant-m16-efc20010256440.971922,7181.814.391.623546
qdrant-m16-efc20010256880.971911,5464.3460.112.113546
qdrant-m16-efc200102561760.97194,98413.37272.793.610546
qdrant-m16-efc2001051210.97758751.101.872.164546
qdrant-m16-efc20010512110.97758,8951.192.022.287546
qdrant-m16-efc20010512440.977514,8532.746.912.532546
qdrant-m16-efc20010512880.97757,9486.5374.533.138546
qdrant-m16-efc200105121760.97754,51115.01303.534.356546
qdrant-m16-efc20010102410.98045341.813.023.613546
qdrant-m16-efc200101024110.98045,4941.943.243.795546
qdrant-m16-efc200101024440.98049,3034.3910.994.097546
qdrant-m16-efc200101024880.98045,9979.8292.934.705546
qdrant-m16-efc2001010241760.98044,19919.86347.825.660546
qdrant-m16-efc20010204810.98273093.155.136.338546
qdrant-m16-efc200102048110.98273,2053.355.406.614546
qdrant-m16-efc200102048440.98275,4767.5117.977.044546
qdrant-m16-efc200102048880.98274,17016.06112.267.629546
qdrant-m16-efc2001020481760.98273,43831.01369.978.307546
qdrant-m16-efc20010010010.95341,4080.701.021.2885,056
qdrant-m16-efc200100100110.953414,3090.741.181.3325,056
qdrant-m16-efc200100100440.953425,3221.633.841.4825,056
qdrant-m16-efc200100100880.953421,6253.3625.101.5805,056
qdrant-m16-efc2001001001760.95345,99413.10193.833.3635,056
qdrant-m16-efc20010020010.96711,1040.881.301.6555,056
qdrant-m16-efc200100200110.967111,3140.941.461.7335,056
qdrant-m16-efc200100200440.967119,7422.104.921.9155,056
qdrant-m16-efc200100200880.967113,7734.5853.872.2055,056
qdrant-m16-efc2001002001760.96715,28714.84231.303.8815,056
qdrant-m16-efc20010040010.97388071.211.832.3145,056
qdrant-m16-efc200100400110.97388,3061.291.982.4255,056
qdrant-m16-efc200100400440.973814,3312.876.922.6565,056
qdrant-m16-efc200100400880.973810,0306.3556.863.0365,056
qdrant-m16-efc2001004001760.97384,79116.13296.414.5565,056
qdrant-m16-efc20010080010.97845461.782.813.4975,056
qdrant-m16-efc200100800110.97845,6331.903.023.6595,056
qdrant-m16-efc200100800440.97849,6594.2310.453.9625,056
qdrant-m16-efc200100800880.97846,4599.6274.224.5765,056
qdrant-m16-efc2001008001760.97844,15820.00346.985.8055,056
qdrant-m16-efc200100160010.98073432.854.525.6415,056
qdrant-m16-efc2001001600110.98073,5163.054.815.9715,056
qdrant-m16-efc2001001600440.98076,0846.7616.326.3355,056
qdrant-m16-efc2001001600880.98074,54314.6397.466.9745,056
qdrant-m16-efc20010016001760.98073,72328.30372.567.6665,056
qdrant-m16-efc200100320010.98212004.927.569.8265,056
qdrant-m16-efc2001003200110.98212,0895.178.0210.1965,056
qdrant-m16-efc2001003200440.98214,05910.7715.4710.8285,056
qdrant-m16-efc2001003200880.98214,07021.5126.0410.8015,056
qdrant-m16-efc20010032001760.98214,07343.0547.7210.7925,056
qdrant-m16-efc2001,000100010.97472274.355.578.17350,143
qdrant-m16-efc2001,0001000110.97472,4014.535.798.41850,143
qdrant-m16-efc2001,0001000440.97474,4169.4320.748.91350,143
qdrant-m16-efc2001,0001000880.97474,15919.2362.279.07050,143
qdrant-m16-efc2001,00010001760.97474,93135.4743.328.77150,143
qdrant-m16-efc2001,000200010.97881685.867.9311.13350,143
qdrant-m16-efc2001,0002000110.97881,8315.937.9511.26150,143
qdrant-m16-efc2001,0002000440.97883,68311.8317.4011.86550,143
qdrant-m16-efc2001,0002000880.97883,68223.8128.1611.91850,143
qdrant-m16-efc2001,00020001760.97883,71147.2651.9411.81450,143
qdrant-m16-efc2001,000400010.98051188.3811.4316.21150,143
qdrant-m16-efc2001,0004000110.98051,2578.6511.9716.66750,143
qdrant-m16-efc2001,0004000440.98052,49817.4323.8117.56350,143
qdrant-m16-efc2001,0004000880.98052,50734.9840.6017.53850,143
qdrant-m16-efc2001,00040001760.98052,50970.0175.7217.52350,143
qdrant-m16-efc2001,000800010.98107413.5118.9526.41650,143
qdrant-m16-efc2001,0008000110.981079113.8319.2126.93050,143
qdrant-m16-efc2001,0008000440.98101,53628.4038.2528.56350,143
qdrant-m16-efc2001,0008000880.98101,54156.9664.7328.54050,143
qdrant-m16-efc2001,00080001760.98101,543113.90123.4328.50950,143
qdrant-m16-efc2001,0001600010.98134323.2230.9445.60650,143
qdrant-m16-efc2001,00016000110.981345823.8932.7947.05850,143
qdrant-m16-efc2001,00016000440.981388349.5962.6249.77550,143
qdrant-m16-efc2001,00016000880.981388399.50111.7949.84850,143
qdrant-m16-efc2001,000160001760.9813884198.89215.8649.78250,143
qdrant-m16-efc2005,000500010.97915020.0524.2037.439250,539
qdrant-m16-efc2005,0005000110.979156419.4023.3235.954250,539
qdrant-m16-efc2005,0005000440.97911,15737.7551.3037.870250,539
qdrant-m16-efc2005,0005000880.97911,16175.2689.9037.840250,539
qdrant-m16-efc2005,00050001760.97911,160150.97172.2837.858250,539
qdrant-m16-efc2005,000800010.98014124.0529.1645.362250,539
qdrant-m16-efc2005,0008000110.980146523.5129.1244.163250,539
qdrant-m16-efc2005,0008000440.980194946.0260.4346.274250,539
qdrant-m16-efc2005,0008000880.980195092.07112.6846.287250,539
qdrant-m16-efc2005,00080001760.9801950184.55206.6646.275250,539
qdrant-m16-efc2005,0001200010.98053429.0134.9355.078250,539
qdrant-m16-efc2005,00012000110.980537928.8636.0454.723250,539
qdrant-m16-efc2005,00012000440.980576756.9674.0257.251250,539
qdrant-m16-efc2005,00012000880.9805768114.14133.8557.309250,539
qdrant-m16-efc2005,000120001760.9805766229.17250.8957.409250,539
qdrant-m16-efc2005,0001600010.98072934.6842.3266.149250,539
qdrant-m16-efc2005,00016000110.980732233.9942.7564.952250,539
qdrant-m16-efc2005,00016000440.980764767.7385.0668.042250,539
qdrant-m16-efc2005,00016000880.9807647135.62159.1968.031250,539
qdrant-m16-efc2005,000160001760.9807646271.59331.1068.126250,539
qdrant-m16-efc2005,0002400010.98112343.8556.0984.706250,539
qdrant-m16-efc2005,00024000110.981124944.0856.3485.034250,539
qdrant-m16-efc2005,00024000440.981149388.89110.1389.286250,539
qdrant-m16-efc2005,00024000880.9811492178.67201.9489.523250,539
qdrant-m16-efc2005,000240001760.9811492356.54423.1889.456250,539
qdrant-m16-efc2005,0004000010.98171661.9381.50120.913250,539
qdrant-m16-efc2005,00040000110.981717164.1480.89124.846250,539
qdrant-m16-efc2005,00040000440.9817334130.88168.04131.770250,539
qdrant-m16-efc2005,00040000880.9817333263.66299.57132.100250,539
qdrant-m16-efc2005,000400001760.9817333526.90676.57132.261250,539