Intent parsed from the query
A query is read for what it constrains, not only for the words in it, so a search that names an attribute your catalogue records is used as a constraint rather than as a bag of tokens.
Search
It runs beside the search you already have rather than replacing it, scores every result on four factors you can read, and always holds a share of traffic back so you can see what it is actually doing.

Where you are
One query, four factors
1/4of the four factors needs a field the catalogue does not record yet. The ranking says so rather than guessing.
Most search tools match the words in the box against the words in your catalogue, and they do it well. That is why replacing one with another rarely moves anything: the matching was never the weak part.
The weak part is what happens after the match. A query for a laptop returns ninety products that are all genuinely laptops, and the ordering has to decide which of the ninety this particular person should see first. Sorted by relevance they are near identical. Sorted by popularity you show everyone the same thing.
There is also a floor under all of it. If your catalogue never recorded screen size, no ranking can order by it and no shopper can filter on it, which is why the audit comes before this page in our own product order.
Ranking a set of results well is a different problem from matching them, and it is the one nobody solves by swapping search engines.
Matching is not ranking
The problem is the order they came back in, and that is a different problem with a different fix.
Illustrative of the shape, not a measurement of your shelf. Swapping search engines changes the first row and leaves the third one alone.
What it looks like
Base relevance, persona, affinity and price band, per result, with the held-back arm beside it.
Engine
Held back
A share of sessions always sees your own order. That is the comparison.
What happens
Four factors, computed per request, and every one of them readable.
Query intent is parsed and matched against the catalogue. This part is not the clever bit and we do not claim it is; it is the baseline every result starts from.
What this person has browsed, searched and filtered in this visit moves persona, affinity and price-band fit. No cookie and no login, so it works on a first visit.
A held-back arm, stable for the session, ranks the same query your original way. That is what makes any number anyone reports about this measurable rather than asserted.
What you get
A query is read for what it constrains, not only for the words in it, so a search that names an attribute your catalogue records is used as a constraint rather than as a bag of tokens.
Base relevance, persona fit, attribute affinity and price band. Each contributes a visible amount to the score, and they are the same four in the console and in the API response.
Every ranked response carries an id and the factors behind it. When somebody asks why a product was third, the answer is retrievable rather than reconstructed.
Not a setting you turn on when you want to measure. Some of your searchers are permanently served your existing ranking, and the two are reported side by side.
Before you commit
Questions
Search is worth turning on once your shelf can answer the questions people ask of it. One category export settles that.
Request a Decision AuditNothing is priced until a pilot has run on your own searches.