PRESTASHOP + TYPESENSE
Indexar PrestaShop
en Typesense.
Typesense es un motor de búsqueda de código abierto, escrito en C++, que resuelve una consulta en milisegundos porque mantiene el índice en memoria. Esta página explica qué hace falta para poner el catálogo de PrestaShop dentro de él: qué campos van a la colección, cómo se mantiene sincronizada y qué pasa con las combinaciones y los precios por grupo.
Montar PrestaShop con Typesense a mano son varias semanas: el esquema, la sincronización, las combinaciones y los precios. Dropfind es ese puente, ya hecho. Puedes usarlo contra tu propio servidor Typesense o contra el nuestro, y lo que se indexa es exactamente lo mismo en los dos casos.
Los nombres de campo y los parámetros de esta página son los reales del módulo, no un ejemplo.
EL PROBLEMA
Qué tiene de malo la búsqueda nativa
El buscador de PrestaShop hace LIKE
'%texto%' contra MySQL, sobre tablas que además crecen con el
catálogo. De ahí salen tres límites que no se arreglan afinando la
base de datos.
«bombila» no encuentra «bombilla». No hay distancia de edición: hay coincidencia de subcadena. Una errata es una venta perdida, y el comerciante no se entera de que ha ocurrido.
El código que el cliente tiene delante —el de la talla concreta, el
del color concreto— vive en product_attribute, y la
búsqueda nativa no entra ahí. Quien busca por su referencia no
encuentra su producto.
Y cada filtro de categoría aplicado, también: los conteos de las facetas nativas son consultas. Un rastreador recorriendo combinaciones de filtros tumba tiendas reales.
Typesense no arregla MySQL: lo saca del camino. El índice vive aparte, en memoria, y las consultas de búsqueda dejan de tocar la base de datos de la tienda.
LA COLECCIÓN
Qué campos van al índice
Una colección por idioma. El nombre del producto, sus categorías y su descripción cambian con el idioma, así que mezclarlos en una sola colección estropearía la relevancia de todos.
Nombre, referencia, EAN-13, referencias de combinación, texto de combinación, fabricante, categorías y descripción corta. Ocho campos, con peso propio cada uno.
query_by · query_by_weights
Identificadores de categoría, de fabricante, de atributo y de valor de característica, más el precio y si hay stock. Todos marcados como faceta, que es lo que permite contar sin consultar.
facet_by
Precio ya formateado, ruta del producto, ruta de la imagen, cantidad y cuántas combinaciones tiene. Con eso la tarjeta de resultado se dibuja sin volver a PrestaShop.
Dos campos que no se enseñan: el número de palabras del nombre y una clave de orden con los números rellenados a ceros, para que «3W» vaya antes que «12W» y no al revés, que es lo que da el orden alfabético de toda la vida.
name_words · sort_key
El módulo crea la colección y mantiene el esquema. Si una instalación antigua se queda sin un campo nuevo, el orden degrada en vez de fallar: la búsqueda sigue respondiendo.
MANTENERLO AL DÍA
Cuándo se reindexa, y qué cuesta
Un índice aparte solo sirve si no se queda viejo. Aquí hay dos caminos y los dos están automatizados.
El módulo se engancha a los eventos de PrestaShop y encola el producto que ha cambiado. No se reindexa el catálogo entero por tocar un precio.
Un cron drena la cola en tandas y se para antes de agotar el tiempo de ejecución, así que no deja peticiones colgadas ni procesos a medias. Lo que quede sigue en la cola para la vuelta siguiente.
Un botón en el back office. Hace falta al conectar la tienda por primera vez y cuando el esquema gana un campo nuevo.
LO QUE NO ES OBVIO
Combinaciones, precios y relevancia
Aquí es donde se va el tiempo si esto se monta a mano, y por eso merecen apartado propio.
Las referencias y los códigos de todas las variantes viajan como lista dentro del documento del producto padre. Así se busca por el código de una talla concreta y lo que sale es el producto, no una ficha duplicada por cada variante.
combination_references · combination_searchable
El del índice es instantáneo y vale para una tienda de un solo grupo de clientes y una moneda, que son la mayoría. Si tienes precios por grupo (B2B), varias monedas o promociones con fechas, el precio se calcula con el contexto del visitante y se cachea. Lo elige el comerciante, y gobierna el buscador y los filtros a la vez para que un producto nunca enseñe dos cifras distintas.
En un catálogo con familias —«Panel 3W redondo», «Panel 24W cuadrado»— decenas de fichas sacan exactamente la misma puntuación de texto. Typesense admite tres campos de orden como máximo; si los tres empatan, devuelve su orden interno y el comprador ve una lista sin patrón. Por eso existe la clave de orden natural.
sort_by · max. 3 campos
Sumando la puntuación de todos los campos, un accesorio que menciona
el término en nombre, descripción y categorías acaba por delante del
producto real. Con max_score manda el mejor campo.
text_match_type
DOS MANERAS
Tu Typesense, o el nuestro
El módulo es el mismo. Cambia dónde vive el índice y quién mantiene el servidor.
Pones el protocolo, el servidor, el puerto y la clave de administración en el back office, y el módulo crea la colección y la mantiene. Tú te encargas del servidor, de la memoria que necesita el índice y de las copias.
Conectas con una clave y ya está indexando. Sin servidor que levantar, sin memoria que dimensionar y sin actualizaciones de Typesense que seguir. La clave que recibe la tienda es de solo lectura sobre su propia colección.
Verificado en PrestaShop 1.7.6 a 9.0.3 con PHP 7.3 a 8.4, contra instalaciones reales en los dos extremos del rango.
¿Lo montas tú o te lo damos hecho?
Las dos ediciones indexan exactamente lo mismo. Empieza por donde te venga mejor y cambia después si quieres.

