← All articles
Measurement · September 2026

PrestaShop's native search, measured: what it corrects, what it replaces, what it never reads

Our PrestaShop page said that “wahser” doesn't find “washer”. We installed a fresh PrestaShop, indexed a fastener catalog, and ran 51 queries. The typo is found. The real flaw is elsewhere, and it matters more to a distributor.

Our argument was wrong

Since it was published, our PrestaShop page presented typos as the first flaw of native search, with this example: “wahser” doesn't find “washer” (in French, “rondele” doesn't find “rondelle”). We had never measured it.

Measured on September 19, 2026: on a fresh install of PrestaShop 9.1.4, the PS_SEARCH_FUZZY setting is 1, which means approximate search ships enabled. “wahser” returns the two “washer” products we added to check it. “rondele” returns the four washers of the French catalog, plus two products that mention one in their description. Our page said the opposite of what our future customers' own product does. It was corrected the same day.

This article says what we found instead. Three things, one of which we would not have seen without a real catalog.

The measurement

PrestaShop 9.1.4, installed from the command line, in French, without demo products. The search settings are the shipped ones, read from the database after installation:

PS_SEARCH_FUZZY                 1    approximate search enabled
PS_SEARCH_FUZZY_MAX_DIFFERENCE  5    letters of difference tolerated
PS_SEARCH_MINWORDLEN            3    minimum word length

The catalog has 177 products, and where they come from matters. 91 are real: the “anchors and screws” collection of a French fastener store, Fischer, SPAX, DEWALT, copied on August 1, 2026. The other 86 are ours: 10 sample products from our site, 64 generated screws from a previous article (in French), and 12 products written for this measurement (washers, nuts, bearings), because no real source we had carried bearings.

The catalog is French, so the queries below are French, exactly as they were run. We translate them where it helps, but we did not run the translations.

Each query ran twice: through PrestaShop's search function, Search::find(), with a trace of what it does to each word, then through the result provider the store's search page calls. Both return the same totals.

M8 is not indexed

This is the flaw that matters to a distributor, and our page didn't say it. PrestaShop ignores words under three characters. It doesn't search them, and it doesn't index them either: in the store's word table, “M8”, “A2”, “20” do not exist.

QueryWhat PrestaShop searchesResult
M8nothing0
M8 x 20nothing: all three words are too short0
vis inox M8 20 (stainless screw M8 20)vis, inox80, every stainless screw, M6 first
ecrou M8 (nut M8)ecrou3 nuts, an M10 first
vis 6 pans (hex screw)vis, pans2, not one hex head screw

The query doesn't return zero results, which would be noticed. It returns results, and they are not the ones asked for. “vis inox M8 20” is a complete specification; PrestaShop keeps “vis inox”, and the customer gets 80 screws in an order where the diameter played no part.

The same rule explains the spelling test. On a catalog that writes “M8x20”, “M8x20” finds the screw, because it is a single five-character word. “M8 x 20” returns nothing. And “M8-20” returns another screw, for the reason that follows.

A correction with no floor

PrestaShop's approximate search works like this: if a query word doesn't start any indexed word, PrestaShop replaces it with the closest indexed word, up to five letters away. That is what makes “wahser” work. It is also what does this:

M8-20      → m820 replaced by m840   → the M8-40 screw
6205 2RS   → 2rs replaced by vis     → 0 results
zzzzzz     → replaced by 6205zz      → a 6205-ZZ bearing
pneu       → replaced by une         → 68 unrelated products

On a four-letter word, five letters of difference allow almost any word in the catalog. The correction cannot say “I have nothing close”: it takes the least distant word, and the customer sees a full results page, without knowing the query was rewritten. For “M8-20”, they get an M8-40 screw presented as the answer. For “6205 2RS”, they get zero while “6205-2RS” finds the bearing: the second word was replaced by “vis” (screw), and no product carries both “6205” and “vis”.

One typo in one product turns the correction off for everyone

This is the measurement we would not have made without real products. The correction only fires if no indexed word starts with the typed word. And catalogs contain typos. In the description of a real Fischer DuoPower wall plug, the text reads “une chevile intelligente”, with “cheville” (wall plug) misspelled.

QueryWhat PrestaShop doesResult
chevillesearches “cheville”60
chevilefinds “chevile” in the DuoPower product, doesn't correct2 wall plugs out of 51

The customer who types “chevile” doesn't get the 51 corrected wall plugs: they get the two products carrying the same typo as them. One typo, in one product, turned off the correction of that word for every visitor. The merchant doesn't see it, since the query returns results, and the misspelled word sits in a description nobody rereads.

We reproduced the mechanism on a catalog with no real products, by adding a single product whose description carries “chevile”. We wrote down the expected result before running it:

without the faulty product   cheville → 2    chevile → 2 (corrected)
with the faulty product      cheville → 3    chevile → 1 (the faulty product only)

What our module does on the same store

We installed our PrestaShop module on this same store, connected to our engine running locally on the September 19 code, and ran the same queries through the same entry point as the search page. For 48 of the 51 queries, the expected products are set by a rule on their name (the washers for “rondele”, the M8x20 screw for “M8-20”), and we count whether the first result is one of them. These rules were written after the measurement: they are published with the rest, so they can be challenged.

Nine times, native search returns nothing or a wrong first result, and the module returns the right one: “M8”, “M8 x 20”, “M8-20”, “M10 x 30”, “6205 2RS” in both cases, “vis inox A4 M10”, “ecrou M8”, “vis 6 pans”. The engine reads “M8” as a diameter, “M8 x 20” and “M8-20” as the M8x20 screw, “6 pans” as a hex head. And “pneu”, “zzzzzz” return zero.

And here is what we don't do better:

  • “M8 20”. A bare number, with no “x” or hyphen, is not read as a length: the M8x20 screw is not on the first page. Native search doesn't find it either.
  • “vis inox M8 20”. The right screw comes second, behind an M8x25 screw.
  • Typos. On “rondele”, “rondlle”, “roulemnt”, the module puts the same products first as native search. PrestaShop's correction does that job.
  • The result count. The engine counts wide: 151 results for “vis CHC” (socket head screw), only one of which is a socket head screw. The first one is right; the total says nothing.

One last point, which matters as much as the others. On these 48 queries, native search puts the right product first 37 times, the module 46 times. We don't publish that ratio as a rate: we chose the queries, and 86 of the 177 products are ours. These are cases, not an average.

Reproducing the measurement

The kit is published: docs/mesures/prestashop-natif-2026-09-19, in this site's public repository, documented in French. It contains the catalog, the 51 queries, the scripts that import the products and run the queries through Search::find(), and what they returned. It carries 86 products, not 177: the 91 real products are texts from Fischer and the original store, and we don't republish them. Totals change where they counted (“rondele” returns 4 instead of 6), the mechanism doesn't; the README gives both columns.

On your own store, three queries are enough:

  • a bare diameter, “M8”: if the page is empty, your short words are not indexed;
  • a reference from your catalog written with a hyphen instead of the “x”: check whether the first result is the right product, not just whether there is a result;
  • a misspelled word you know is present in one of your products: if the correct query returns far more than the misspelled one, the correction is off for that word.

These figures hold for PrestaShop 9.1.4 with its shipped settings. A merchant can turn approximate search off, change the minimum length or install a search module: each of these choices changes the result. The mechanisms of the correction and of short words can be read in classes/Search.php; the effects described here were measured.

14-day free trial

Try Heurix on your catalog, no credit card.

Start free trial