Search that reads the sentence, not the keyword.
Port2Port is South Africa’s leading online wine and spirits marketplace. In August 2026 it went live with a search box that takes a sentence instead of a keyword. You type what the evening actually looks like, and it comes back with a short list and the reason each bottle is on it. We built it with their team.
The problem with searching a wine site
Catalogue search is a filing system. It assumes you already know the name of the thing you want, or at least the category it lives in. That works for someone who has come to buy a 2021 Swartland Syrah, and it works badly for everyone else.
Wine makes the mismatch worse than most categories. The catalogue is indexed the way the trade thinks: producer, cultivar, region, vintage, critic score. Customers think in occasions. What is for dinner, who is coming, how much to spend, whether they want to look like they know what they are doing. There is no field for any of that, so the customer has to translate their own need into the shop’s vocabulary before the shop can help them. Most people do not bother.
The failure is not subtle. Typed into the old search, “a bold red to impress my dinner guests” returned zero results, while the bottle that answers it sat in stock the whole time.
What we built
One search box that accepts a sentence. It sits where the old search box sat, and the old behaviour still works: type a producer name and you get that producer.
Type a sentence and the suggestion panel opens with what the system understood, written out as labelled attributes, and a small number of specific bottles underneath, each with a one-line reason. Press through and the results page opens with the same short list on top of the full filtered catalogue, so you can carry on browsing the normal way.
What it does with a sentence
Three real queries, run on the live site in August 2026.
“A bold red to go with a braai”
- Yalumba The Signature 2016. A bold blend of Cabernet Sauvignon and Shiraz, for grilled meat.
- Radford Dale Vinum Grenache 2023. Grenache’s fruit and spice against smoke.
- Aaldering Mixed Red Wine Case. Variety, for a table of people.
“A crisp white for a hot afternoon by the pool”
- Cavalli Wine Estate Reserve White 2025. Refreshing, built for warm days.
- Mullineux Old Vines White 2024. The step up, if the afternoon deserves it.
- Domaine Famille Paquet Saint-Veran Les Cras 2020. The interesting one, for sharing.
“Something to celebrate a promotion, around R900”
- Benguela Cove Vinography Cabernet Sauvignon 2021. Rich, for an occasion.
- Rascallion Wines 45 RPM 2024. An unusual blend, and a conversation.
- Riebeek Valley Wine Co RAAR Shiraz Carbonic Maceration 2025. Bold, and a safe bet.
Note what changes between the three. The system does not force every sentence through the same set of fields. A braai query produces colour, style and food context. A budget query produces budget and intent. It reads what is actually there and leaves the rest alone, because the alternative is inventing constraints the customer never asked for.
How it works
The build is called Hybrid Search, and the name is doing real work rather than marketing. Two different searches run at the same time and their results are blended.
- Listen. It reads the whole request rather than picking keywords out of it.
- Understand. It pulls out what actually matters in the sentence: colour, style, budget, the occasion behind the ask. Only what is there.
- Match. One search matches the words. The other matches the meaning. Both run, and the results are blended. This is the hybrid part.
- Guide. A shortlist is chosen from what came back, each pick carrying a one-line reason drawn from that bottle’s own details.
Why two searches instead of one
Word matching is precise and literal. It finds the bottle whose name or description contains what you typed, and it only ever knows the words it was given. Meaning matching finds bottles similar in character and style even when none of the words line up, because it understands that “bold” points at a particular kind of wine.
On its own, each fails in a predictable way. Word matching returns nothing for a sentence. Meaning matching drifts away from the specific bottle you actually named. Run together, the shopper gets the precisely named bottle they asked for and the ones they would never have found by name alone.
It also means nothing was taken away. Type a producer and a vintage, or a cultivar and a price ceiling, and the answer is as instant as it ever was. The new behaviour only appears when the query needs it.
It shows its working
Whatever the search understood is written out on screen as tags. Not buried in a debug panel, not implied by the results, but stated plainly: red, bold and structured, to impress, dinner party, under R500.
This is the part that gets skipped most often, and it decides whether people trust the thing. A recommendation you cannot interrogate is a guess. With the reading on screen, a shopper can see at a glance whether they were understood, and adjust rather than start the sentence again.
The shortlist, and what it is not allowed to do
The rules around the shortlist matter more than the shortlist itself.
- Real bottles only. Picks are drawn from actual, in-stock listings, on price, rating and character. Nothing is generated.
- Reasons come from the bottle. Each line is grounded in that wine’s own details rather than written freely.
- No popularity arguments. The reason is never a version of “lots of people bought this”. That is a sales tactic, not advice.
- No commercial thumb on the scale. Nothing steers a shopper towards a pricier or stronger bottle to lift the basket. A shop that talks you into the wrong bottle does not get a second visit.
- Fail quietly. If the intelligent path is slow or unavailable, the search falls back to ordinary keyword search. The shopper gets a slightly less clever answer instead of an error page.
Before and after, on the same sentence
“A bold red to impress my dinner guests”
- Before. Zero results. The shopper gives up, or retypes keywords they may not know.
- After. The same sentence. The reading appears as tags, a full result set arrives, and a short guided list sits on top of it with a reason for each bottle.
That is the whole case. Not that search got cleverer, but that a customer who arrived with a sentence instead of a search term stopped hitting a dead end.
This is a live system on a working shop, not a finished object. It handles occasion, food, style and budget language well, and it is still being tuned at the edges. The queries that expose those edges are the ones we are most interested in.
How the work ran
We were the AI engineering and implementation partner on this. In practice that meant sitting with the Port2Port team rather than taking a brief and disappearing: working out how wine customers actually buy, agreeing what a good answer looks like, and shipping in pieces that could be used and judged along the way instead of presenting something large and theoretical at the end.
Most of the difficulty was never the model. It was the translation layer between how a customer talks and how a catalogue is indexed, and the judgement about what the system is allowed to say when it is not sure.
Try it
Go to port2port.wine and type a real sentence into the search box. Something you would actually say. If it gets it wrong, we would like to know what you typed.