In PrestaShop, product search functionality relies on keyword-based indexing. Each search query entered in the search bar undergoes sanitization and is split into individual words. These words are then matched against the ps_search_word table. Matching product IDs are retrieved from the ps_search_index, followed by the process of weighting and sorting to deliver the most relevant product results.
There are several actions that can trigger a reindex of a product or the complete catalog in the database:
| Location | action | indexation type |
|---|---|---|
| PrestaShop installation | injecting fixtures | product |
| PrestaShop installation | installing a theme | full |
| Back Office | creating a product from Back Office | product |
| Back Office | updating a product from Back Office | product |
| Back Office | duplicating a product from Back Office | product |
| Back Office | deleting a product from Back Office | product |
| Back Office | activating a product from Back Office | product |
| Back Office | creating a new shop | full |
| Back Office | installing a theme | full |
| Back Office | requesting an index rebuild | full or missing product only |
| Webservices | creating a product | product |
| Webservices | updating a product | product |
| Crons | refreshing search index | full |
Almost every field / information in the product is weighted to fine tune result relevance.
The weight of fields is adjustable from the Back Office > Shop Parameters > Search with the configuration keys below:
| Field | Configuration key | Default weight | Description |
|---|---|---|---|
| pname | PS_SEARCH_WEIGHT_PNAME |
6 | Product name |
| reference | PS_SEARCH_WEIGHT_REF |
10 | Product reference |
| pa_reference | PS_SEARCH_WEIGHT_REF |
10 | Combination reference |
| supplier_reference | PS_SEARCH_WEIGHT_REF |
10 | Supplier reference |
| pa_supplier_reference | PS_SEARCH_WEIGHT_REF |
10 | Combination supplier reference |
| ean13 | PS_SEARCH_WEIGHT_REF |
10 | Product EAN13 |
| pa_ean13 | PS_SEARCH_WEIGHT_REF |
10 | Combination EAN13 |
| isbn | PS_SEARCH_WEIGHT_REF |
10 | Product ISBN |
| pa_isbn | PS_SEARCH_WEIGHT_REF |
10 | Combination ISBN |
| upc | PS_SEARCH_WEIGHT_REF |
10 | Product UPC |
| pa_upc | PS_SEARCH_WEIGHT_REF |
10 | Combination UPC |
| mpn | PS_SEARCH_WEIGHT_REF |
10 | Product MPN |
| pa_mpn | PS_SEARCH_WEIGHT_REF |
10 | Combination MPN |
| description_short | PS_SEARCH_WEIGHT_SHORTDESC |
1 | Product short description |
| description | PS_SEARCH_WEIGHT_DESC |
1 | Product description |
| cname | PS_SEARCH_WEIGHT_CNAME |
3 | Category name |
| mname | PS_SEARCH_WEIGHT_MNAME |
3 | Manufacturer name |
| tags | PS_SEARCH_WEIGHT_TAG |
4 | Product tags |
| attributes | PS_SEARCH_WEIGHT_ATTRIBUTE |
2 | Combinations |
| features | PS_SEARCH_WEIGHT_FEATURE |
2 | Product features |
To trigger a search index refresh via cron, create a GET request URL to the Back Office Admin controller, AdminSearch.
| Param | Value | Description |
|---|---|---|
| action | searchCron | |
| ajax | 1 | |
| full | 1 | If 1, it will rebuild the full index. If 0 or omitted, it will index only missing products |
| token | tokenValue |
Back Office > Shop Parameters > Search > IndexingInstead of manually running the script, you can use an indexation URL with cURL in a crontab.
# crontab
# triggers a reindex everyday at 6:00AM
0 6 * * * curl https://domain.tld/admin-xxx/index.php?controller=AdminSearch&action=searchCron&ajax=1&full=1&token=xxxxxxxx