From 63% to 96% top-3 accuracy: How Canals built hybrid product search on Elasticsearch

See story snapshot
  • 63% → 96%
    Top-3 product-match accuracy, launch to today
  • 90%
    Of matches auto-selected, with no action needed from the user
  • 90M
    Products indexed for hybrid search across the fleet
  • 400K
    Search queries a day
  • Next-day
    New catalogs searchable, with 24–48 hour contract-to-production in the fastest onboardings

Canals, which builds AI for wholesale distributors, runs a hybrid keyword-and-vector product-matching engine on Elasticsearch that lifted top-3 match accuracy from 63% at launch to 96% today, with roughly 90% of matches now resolved without a human ever picking from a list.

Summary

Canals is a Series A startup bringing AI-driven automation to wholesale distribution, the industry that moves most of the physical goods bought and sold. Its product automates the order-and-catalog work distributors have always done by hand, and the capability it depends on most, matching a customer's request to the right product in a sprawling, messy catalog, runs on Elasticsearch. The company started with keyword-only search, found it could not clear the relevance bar the product needed, and added machine learning without leaving its search platform: keyword, dense vectors, and sparse vectors all sit in one Elasticsearch index, feeding a downstream ranking layer that narrows a wide candidate net to a top-three answer. The surprise, in an era sold on vector search, is how much of that result still rides on the keyword layer. The company launched on hybrid at 63% top-three accuracy and tuned its way to 96%, and today the system auto-selects the product outright in roughly 90% of cases. Canals runs the whole thing on managed Elastic Cloud, with roughly 90 million indexed products serving 400,000 queries a day, and adds new distributor catalogs that are searchable the next day.

An industry that runs on tribal knowledge

A prospective distributor came to Canals expecting to be let down. They had watched order-entry systems struggle to match against their catalog before, so they handed over a sample of about 30,000 products as a test. The results surprised them enough that they expanded the test to roughly 300,000. When match quality held at that scale, they signed.

What they were probing is the hardest problem in wholesale distribution: product matching. A customer request rarely arrives clean. It comes in as a partial part number, a brand, a product line, or a natural language description, and the job is to turn that into the one right SKU out of a catalog that can run from 10,000 items to 4 million. Get it right and an order moves in seconds. Get it wrong and the wrong part ships, which means a return to process and often a lost order.

For most of the industry's history, the only reliable way to do this was a person who had spent years learning the catalog by heart. That expertise is slow to build and hard to hire, and it does not scale as catalogs grow, which is the gap Canals set out to automate.

Running a distributor still means people reading documents, emails, and phone calls and re-keying them into orders, quotes, invoices, and receiving records, over and over. Canals connects to a distributor's systems, reads those requests as they arrive, and automates the response across the workflow. Accurate matching is the step everything else depends on, and it is the step Canals chose Elasticsearch to power, across roughly 90 million products spanning its distributors.

"Keyword alone, it's super hard to maintain everything about similarity, the synonyms, all the different ways people say things. Those synonym lists get huge. With hybrid retrieval you don't have to: You train the model on your own data, it learns from how users actually search, and you stop handling all those synonyms by hand."

– Matias Weber, Director of Machine Learning, Canals

Keyword first, and where it stopped

Canals never ran a search bake-off. Erez Arnon, the company's CTO and cofounder, had used Elasticsearch at a previous company and reached for it again because it could act as both a keyword engine and a vector store.

The first version was keyword-only, and it shipped in days. "The Elasticsearch piece was very easy. Days," Arnon said, recalling a stretch three and a half years ago when he was building the entire product on his own. The team hoped keyword would be enough. It was not. Match quality settled at a ceiling well below what the product needed, so Arnon brought in advisors who had worked on search at Meta, Google, and Amazon, and the team introduced machine learning and embeddings, indexing them straight into the platform it already had. Because Elasticsearch can search vectors in addition to keywords, adding embeddings was a straightforward addition rather than a migration, and that is what let the relevance work move quickly.

Architecture: One wide net, one ranking layer

Canals connects directly to each distributor's ERP, the system that runs their orders, inventory, and accounting, both to push approved quotes and orders back in and to pull the product catalog, pricing, and history out. The catalog syncs to Canals' own database, where a sync-and-enrich step cleans it up, and an indexer process then runs each product through the company's models to generate embeddings and indexes it into Elasticsearch. The process is incremental: product changes are light during the day and mostly arrive in overnight catalog syncs, each one re-embedded and re-indexed so the searchable catalog stays current. Across the fleet, that comes to roughly 90 million indexed products and 50 million vectors, serving on the order of 400,000 queries a day.

Search itself runs in real time, in two stages. A customer request arrives as an email, a PDF, or a spreadsheet, and the system turns it into one query per line item. The first stage casts a wide net, pulling candidates out of Elasticsearch through several methods at once: BM25 keyword matching, dense vector similarity, and sparse vector matching, all from the same index. The second stage is a downstream set of reranking models and algorithms that order candidates by best fit and narrow them to the top matches. It is also where live signals the index deliberately does not carry (availability, current price, and stock status) are applied. The rep approves the result, and the quote or order flows back to the ERP.

Because Elastic Cloud is managed, the search team spends its time on match quality across every tenant rather than on running and scaling the cluster.

Catalog data syncs continuously from each distributor's ERP into Elasticsearch; at search time a request becomes one query per line item, is retrieved and reranked, and the approved result returns to the ERP.

Keyword, dense, and sparse in one index

Canals uses every retrieval type Elasticsearch offers rather than betting on one. Dense and sparse embeddings run as a split implementation in production alongside keyword, with the models fine-tuned in-house rather than taken off the shelf. The point of the wide net is recall: Pull every potentially relevant candidate first, and then let reranking refine the accuracy.

In practice, keyword search carries a large share of the load, catching the exact matches that semantic search alone can miss.

"There's a lot of recall, a lot of information, that comes from keyword search, and it tells you how to get to the right product. That's usually underestimated."

– Matias Weber, Director of Machine Learning, Canals

Part numbers are the clearest case. Matching the same part number with a different suffix or prefix is exactly where keyword shines, and so is finding a brand or product line buried in whatever field a messy catalog happens to put it in. When a product type is brand new to Canals, the semantic model may not recognize it yet, but keyword search still finds it, because the words the customer types match the words written in the catalog.The same keyword layer also powers autocomplete in the product, a fast, as-you-type experience that a standalone vector database would not handle well.

Custom analyzers: Knowing what matched and why

Of everything the team built, Matias Weber, director of machine learning at Canals, points to custom analyzers as the single capability that made the biggest difference. Distributor data has its own language, full of part numbers, abbreviations, measurements, inconsistent spacing, and punctuation. In electrical products, for instance, the same breaker might be written as "QO-120," "QO 120," or "qo120," while a customer searches for "3/4 EMT conn" rather than the full catalog description. Rather than rely on default text analysis, the team built its own analyzers and filters and uses them for both indexing and search, normalizing those variations so Elasticsearch understands they refer to the same thing, and so the system knows precisely which terms it matched and why.

No single rule transformed search on its own. Quality improved gradually, one change at a time, as the team learned how distributors and their customers actually describe products, and the cumulative effect made retrieval far more reliable. That same control pays a second dividend: capturing the matched terms from keyword search feeds Canals's machine learning pipeline, so the keyword layer is not only returning results, it is generating features the models learn from.

One platform instead of two indices

Keeping everything on one platform pays off every day, not just at the start. Asked what Canals would have had to build or buy if Elasticsearch could not do both keyword and vectors, Weber went straight to the maintenance cost.

"It's double the work to maintain. When you're building filters or aggregations, now you're managing two indices, and that's harder. If you're working with facets and your data is in different databases, you have to get creative to get things aligned and working well. Having everything in the same place, with as many vectors as you want in the same database, makes everything easier."

– Matias Weber, Director of Machine Learning, Canals

The deeper problem is ranking: Two systems return two sets of results on different score scales, and merging them into one trustworthy ranking is its own hard problem. One platform removes it.

For distributors with very large catalogs, Canals skips embeddings for products that are never used, which saves storage and reduces noise in retrieval. That is why the fleet carries roughly 50 million vectors against 90 million indexed products: The unused products are still searchable by keyword, they just are not embedded. Separately, the team adopted Better Binary Quantization (BBQ) out of the box to compress the embeddings it does store.

From 63% to 96%: Climbing the match curve

The clearest measure of the system is simple: how often the right product lands in the top three results the distributor's sales rep sees. They launched on hybrid, and it was right 63% of the time. The team tracked that number from the start, and tuning the hybrid system pushed it steadily upward.

"When we first launched, the result was in the top three 63% of the time. Now we're at 96%. And a lot of the cases that are missing aren't the search being wrong. Sometimes there simply is no matching product in the catalog, so the ceiling isn't even 100%."

– Erez Arnon, CTO and Cofounder, Canals

The gap that remains is mostly not a search problem. It is cases such as the customer asking for something the distributor does not carry, so there is no matching product in the catalog. On the products that do exist, recall reached 98%, and the team's focus has moved from finding every candidate to ranking the right one first.

The most visible result for a distributor is what happens above the top three. In roughly 90% of cases the system is confident enough that it does not show a list at all; it just picks the product, and the user takes no action. A rep who once relied on memory, or on typing the first six characters of a part number and checking the rest, now gets the right item without hunting for it. New distributors see this quickly: Precision starts above 75% from the first interactions and climbs over a couple of weeks of usage, and a new distributor's catalog is searchable the next day, with contract-to-production times of 24 to 48 hours in the fastest cases.

Matching quality is the core of the value Canals's Order Entry product delivers; it is where the time savings and productivity gains come from. Reps also use it to decide. When a requested product is unavailable or unfamiliar, they check the matches Canals suggests to find a substitute or equivalent they can order with confidence.

The payoff shows up in the distributors’ own numbers. Turtle nearly tripled its win rate on quotes, a 2.8x gain, after moving to Canals, and Atlantic Plumbing Supply grew sales by more than 50% as reps spent less time keying orders and more time selling. Across its base, Canals has processed more than 8 million sales orders for over 13,000 users. When the right product is fast to find and safe to trust, more quotes turn into orders.

The team tracks match quality in near real time: An hourly check on whether reps are still selecting what the system suggests means a drop shows up within the hour. Cluster health, CPU, usage, and storage is monitored separately.

Before and after


BeforeAfter
Product lookupThe distributor's sales rep relies on memory and tribal knowledgeHybrid search returns the right product in the top three 96% of the time; in ~90% the match is confident enough to auto-select, with no user action
Order entryManual reading and re-keying of documents, emails, and phone callsRequests arriving by email, PDF, or spreadsheet parsed into one query per line item and matched automatically
Retrieval architectureEarly prototype: keyword-only, below launch-quality accuracyKeyword, dense, and sparse candidates from one index, narrowed by a downstream ranking layer
Relevance tuningHand-maintained synonym lists that grew endlesslyFine-tuned dense and sparse models that learn semantics from user behavior, plus custom analyzers
Search infrastructureWould require a separate vector database alongside a keyword engine, and two indexes kept consistentOne managed Elasticsearch platform; the team spends its time on match quality, not on running the cluster

 

What Canals learned, and what comes next

The lesson the team keeps returning to is a design principle more than a technology bet: refuse the either/or. Running keyword, dense, and sparse together, and letting each cover what the others miss, is what carried Canals's recall and gave its models the signal they learn from. Asked what he would change starting over, Weber's answer was short: probably nothing. Asked what he would tell another team weighing Elasticsearch against a separate vector database, he framed it as a question of headroom.

"Elasticsearch gives you a search engine that works extremely well out of the box, but also gives you all the knobs you need to tune it for your specific domain. You can get started quickly, and as search becomes more important to your product, you have the flexibility to keep pushing the quality much further."

– Matias Weber, Director of Machine Learning, Canals

Underneath the relevance work is a simpler reason the small team could move as fast as it did.

"Elasticsearch never blocked anything or slowed anything down. It let us run all of our experiments and all of our iterations and get to where we are today, and we're still iterating. Elasticsearch makes that easy. We could focus on building search rather than maintaining clusters."

– Erez Arnon, CTO and co-founder, Canals

Next, Canals wants to put more than products into Elasticsearch. Today the platform retrieves catalog items; the direction the team is most excited about is using search to enrich the specifications behind a request. A customer order is often more than a list of parts, arriving with drawings, specifications, and other documents that define requirements the products have to meet. By retrieving the relevant details out of those documents and connecting them back to each line item, Canals can give its AI agents a far richer picture of what the customer actually needs, matching against the technical constraints buried in the supporting files rather than a short product description alone.

The same principles scale from a catalog of 10,000 items to tens of millions: Keep keyword and vectors on one platform, cast a wide net for recall, and let a ranking layer earn the precision.

Topics: Hybrid search, Elasticsearch, vector database, dense vectors, sparse vectors, BM25, custom analyzers, BBQ, reranking, product matching, wholesale distribution, vertical SaaS, Software & Technology

See how Elasticsearch combines keyword, dense, and sparse retrieval in one platform, or start now with a free trial.