Back to Blog
Research & Technology

Cheaper Index Construction: Two Bits per Dimension

The index-construction task of the SISAP 2026 Indexing Challenge scores the time to build the index as well as the time to search it. We made a single distance computation eight times smaller, which halves the build — and then spent four tenths of a second buying back the accuracy that costs. Third place out of fourteen teams.

Andre Moelle
Andre Moelle
vviinn came in 3rd place of the SISAP Index Construction Task Challenge 2026

The SISAP Indexing Challenge is an open competition for similarity search: the organizers set the datasets, every submission is run under the same conditions, and time is only counted above a fixed accuracy. Our overview of this year’s challenge Time to Celebrate! First Place in Vector Search at the SISAP 2026 Indexing Challenge covers all three tasks and how the field came out. This one is about the task where building the index counts too.

What we entered with is the Dynamic Exploration Graph, the index behind our own search. We have written about it here before, in Dynamic Exploration Graph: Fast Search in Evolving Catalogs — the post to read first if the terms below are new, since it explains what a proximity graph is and why ours is built to absorb insertions and deletions while it is being searched. The open source implementation is deglib, and that is what both submissions are built on.

One thing all tasks have in common: approximate nearest neighbor search trades a small amount of accuracy for a large gain in speed, so every task sets a minimum for that accuracy and measures time second. The measure is recall: the share of the true nearest neighbors a search actually finds. At a recall of 0.80, eight of ten items are true nearest neighbors, and no submission can buy speed by returning worse ones.

What the task asks

Task 1 turns the usual arrangement inside out. It embeds 6.4 million Wikipedia passages with BGE-M3 into 1024 normalized dimensions and asks for the 15 nearest neighbors of every single one of them. There is no separate query set, because the collection queries itself, and the time to build the index counts toward the score, which makes construction most of the work.

Two bits per dimension

Our lever was to make distance computations cheap while the graph is being built. Instead of comparing full-precision vectors, we compare them in a two-bit form: of every vector, keep the dimensions with the largest magnitudes, and of those keep nothing but the sign.

That idea is not ours. Equi-Voronoi Polytopes (EVP) were introduced at SISAP 2025 by Connor, Dearle and Claydon and used in that year’s challenge by another team. A submission does not have to take first place for its ideas to be worth having, and this one looked exactly like the lever a task dominated by build time responds to. Whether it would survive contact with our graph was genuinely open until we measured it.

Comparing two vectors in this form is a handful of bitwise operations on whole machine words instead of arithmetic on every dimension.

What the codes give up

The name says what the price is. Every vector is replaced by the nearest vertex of a polytope whose cells all cover the same amount of the sphere the vectors live on; so the space is divided into cells, and what is compared afterwards are the cells, not the vectors. The query is quantized the same way, and two vectors that share a cell become the same code, however far apart they were.

Left: the Euclidean distances to the query, 0.40, 0.63 and 0.83 — on normalized vectors those run from 0 to 2. Right: the arrows are the move each vector makes when it is replaced by its code, and the numbers count cells instead of measuring them, which is why two candidates end up on the same value. A two-dimensional analogy: in 1024 dimensions the cells are not hexagons.

There is a second reason the codes cannot be the last word, and it is arithmetic rather than geometry. Comparing two codes means counting: how many of the kept dimensions agree in sign, minus how many conflict. The result is a whole number, so for a 1024-dimensional vector the comparison has only a few hundred possible outcomes, and vectors at genuinely different distances routinely land on the same one. Connor, Dearle and Claydon argue that this is close enough to gather the right candidates; it is plainly not enough to order them. The measurements said the same. On its own the two-bit form builds the index in less than half the time, but then misses too many true neighbors; recall drops to 68 percent, well below the 80 percent the task requires. What made it work was to treat its answers as candidates rather than results: search on the EVP form, then recompute the shortlist with the precise vectors — 16-bit floats, the form the index keeps anyway — and reorder it. The coarse form decides who gets a precise look; the precise form decides the order.

Search coarse, rerank precise

What that costs is a shortlist of fifty candidates per vector and one pass of precise arithmetic over them; what it buys is the recall that quantization gave away. On a 200,000-vector subset, where a full-precision run still clears the recall bar and can serve as a reference, both sides of that trade are easy to read off: the build halves, and the reranking pass costs four tenths of a second.

Total time on the Wikipedia subset, split into the build and everything else. The middle row is faded because it misses the recall requirement and would not be scored.

The result, and the entry that beat it

That was enough for third place, and not for more.

Official result on the evaluation dataset. The whole field is far ahead of the reference implementation; between the top entries the distances are small in absolute terms and decisive in the ranking.

The winning entry, PiPNN, is built for exactly this shape of problem, and its trick is that it never searches the graph to find candidates. It repeatedly assigns vectors to groups around randomly chosen leaders, small enough that dense matrix arithmetic can produce all the distances inside a group in one go, and large enough to overlap, so that vectors in more than one group tie the local results together. The candidate edges that come out are then thinned down to a fixed number per vector.

Groups around random leaders, one block of dense arithmetic per group, and the graph that comes out of it. Yellow marks the vectors that joined both groups.

What makes that fast is not a cleverer rule for choosing edges, but what the rule is offered. Feeding it from blocks of dense arithmetic instead of from a graph search is the whole difference, and it only works because the dataset is complete before the first line of work. There is no incremental mode.

That is the honest reason for the gap, and also the reason it does not worry us. Our index is built for a catalog that keeps moving: task 1 measures one pass over a dataset that is finished, while our embedding pipeline produces the opposite situation, where vectors keep arriving and the index has to stay connected and searchable while they do. A batch builder is genuinely faster at the bulk build; it just has to redo it. We entered task 1 anyway, out of scientific curiosity about how far the approach can be pushed — and the quantization work it produced is useful well beyond this benchmark.

Two ways to keep an index current: rebuild it whenever enough has changed, or insert into the one that is already there.

Key Takeaways: Cheaper Builds for Growing Catalogs

The quantization step is the part that outlives the benchmark. It makes every distance computation during construction eight times smaller, and construction cost is exactly what grows when a catalog grows.

While static batch processing excels in benchmarks, our approach proves we can deliver high-speed, cost-efficient index construction without sacrificing the dynamic adaptability that fast-growing e-commerce catalogs demand.

The other task we entered needed a different kind of change — the same index, but a geometry it was not built for: how we got the problem back into Euclidean space Winning the Search Task with A Different Geometry.

References

Related Posts

Stay in the loop

Product updates, announcements, insights, and more. Delivered monthly to your inbox.

You can unsubscribe at any time.