We don’t have a customer yet. Here’s what we can prove anyway.
No testimonial, no logo, no unsourced “+15% conversion”. Instead: a measurement you can run yourself.
public-demo — 2,821 hardware and power-tool products, with their real part numbers, their four ways of writing the same dimension, and their supplier descriptions. 14,124 indexed terms.
This is a demonstration catalog, not a customer. Nobody buys here. What we measure on it is true and repeatable; what we don’t measure on it is a sale.
Measured 2 September 2026, across all 2,821 products of the public-demo catalog.
We compare Heurix against BM25 — the default ranking of Lucene, Elasticsearch, PostgreSQL and SQLite. Standard parameters. Not a named competitor: it’s what any platform does without special tuning.
The baseline gets the same catalog, split into lowercase words. We remove only what Heurix adds: typographic folding, typo tolerance, the annotation cascade.
No query is written by hand. For every product carrying a metric dimension, we rewrite its own dimension in a spelling other than its own — M8x20 becomes M8 x 20, M8*20, M8-20 — and ask both engines to find the product again. 300 queries, 271 products.
207 products out of 300 found in the top ten results.
292 products out of 300 found in the top ten results.
Measured on 2 September 2026: 300 queries derived from 271 products, across the 2,821 products of the public-demo catalog.
+28 points of recall. 88 queries where Heurix finds and BM25 doesn’t.
Three things we won’t sell, because the measurement doesn’t support them.
Typo tolerance. On vsi inox, boulno M8, rondele plate: not one top result BM25 wouldn’t reach. When one word is mistyped, the other carries the query. Measured twice, on two corpora, by two methods.
Accents. The catalog writes them, the buyer writes them. No gap.
Standards. ISO 4014, NF E 25-112, DIN 933: even.
And even dimensions, in the simple case. M8x20, M8 x 20, M8*20, M8-20: all four spellings put the right screw first — in Heurix and in BM25. Only one query separates them: 8x20 inox, when the buyer drops the M. Heurix ranks it first; BM25 doesn’t find it at all.
The 28-point gap isn’t one spectacular case. It’s the accumulation, across 300 queries, of small recoveries like that one.
Ranking isn’t the engine’s business alone. On this demonstration, three pins push three products to the top of the query vis — placed on 2 September 2026 for this page, each with its reason:
Two catalogs, and the difference matters. The BM25 comparison above was run on public-demo, the French catalog. This section was measured on public-demo-en — the catalog you would query. The numbers below are not the French ones; they are the ones you can reproduce.
With pins: 574 results. The three promoted products, in the order the merchant chose, then the engine’s ranking.
Without pins: 571 results, of which 41 tie on score at the top — 19.76 each. The engine has no reason to prefer any one of them; the order among them is a tie-break, not a ranking.
visNot one product name in this catalog contains the word “vis”. They say screws, wood screws, collated screws. The query returns 574 results all the same — reached through the VIS-… references and the #FAM_VIS annotation, never through a name.
That is this page’s argument in a single query: the engine does not only read names. It decomposes a reference and it carries an annotation, so a word absent from every title still finds the 574 products that answer to it.
The three come out at 0.00, not one of them. No English name or description carries the standalone word “vis”, so the engine gives none of them any reason to be there.
They are first because a human decided so, and the score says it. That’s the clearest demonstration of the separation: what comes from the engine carries a score, what comes from a hand-placed rule carries zero. On the French catalog only the bit set scored zero — the other two carry “vis” in their names there. In English the demonstration is cleaner: three products, three zeros.
571 results become 574. The three pinned products are the difference: pinning brings in products the query didn’t reach. A pin isn’t only a reordering — it adds.
Merchandising applies on both surfaces: the authenticated API (/v1/index/<catalog>/search), the one your site would call, and the public key-less endpoint (/v1/public-demo/search) that the demo widget on our home page queries.
So run the query yourself. Type vis into the demo on our home page: same three products at the top of the list, same order, same total of 574. No key, no account, no email. The “Recommended pack” tile shown above them is a separate zone, not the first result.
And if you want the scores, which the widget doesn't show, the same response in one line:
curl -X POST 'https://api.heurix.fr/v1/public-demo/search?vertical=outillage-en' \
-H 'Content-Type: application/json' -d '{"q":"vis","limit":20}'
574 results, the three pinned products first in the merchant's order, each with "pinned": true and "score": 0.0, then 41 products at 19.76. Every figure in this block is in that one response.
Two caveats, so the invitation holds what it promises. The vertical decides the catalog: outillage-en is the English one, measured here. outillage is the French one — the same three pins, but 846 results and French product names. Whichever the home-page widget sends on the day you read this, the query above names its catalog explicitly. And the state without the pins is no longer reproducible anywhere: the 571 results and the 41-way tie were read before the rules were placed. That is the one line in this block you have to take on trust.
Neither state is “the right one”. The first is what the merchant decided, the second what the engine proposes when it has no reason to choose. In a fastener catalog, the word “vis” discriminates nothing: it is for the merchant to say what to show.
Measured 2 September 2026 on public-demo-en, query “vis”: 574 results with the three pins, 571 without, 41 products at the top score (19.76), all three pinned products at 0.00. Re-checked 4 September 2026 against the public endpoint: 574, the three pins at the top all at 0.00, then 41 products at 19.76 from rank 4 to rank 44 — unchanged. The 571 was read before the pins were placed; it is corroborated by 574 minus three pinned products whose match list is empty. Until 4 September this block stated that the public endpoint did not apply overrides: that was accurate, and an engine fix made it false the same morning. The BM25 comparison higher up the page was measured on public-demo, the French catalog.
We stop here. +28 points of recall is a fact; “therefore £X of revenue” would be a chain we hold one link of.
What can be said about the next link, with its source: in a Harris Poll survey commissioned by Google Cloud (November–December 2022, around 13,500 adults across 14 countries, all of whom had used a retail site’s search function in the previous six months), 53% of U.S. consumers surveyed say they typically abandon their carts and go elsewhere if there’s at least one item they can’t find on a website.
That’s self-reported, not observed behaviour, and it says nothing about your catalog.
The links after that — how many of your searches fail, how much of your traffic goes through search, your conversion rate — are yours. The ROI simulator takes them as sliders and shows its assumptions.
Source: Google Cloud — New research on search abandonment in retail, Harris Poll survey, November–December 2022.
The catalog, the 300 queries and the BM25 baseline are reproducible. Ask for them, or try your own queries on the demo.