Empezar gratis

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.

O coincide la cadena, o no hay nada

«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.

La referencia de la combinación no se busca

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.

Cada búsqueda es carga en tu MySQL

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.

Lo que se busca

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
Lo que se filtra

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
Lo que se pinta

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.

Lo que solo sirve para ordenar

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.

Al guardar un producto

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.

Por lotes, con presupuesto de tiempo

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.

Reindexado completo cuando toca

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 combinaciones, en el documento del producto

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 precio tiene dos respuestas válidas

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.

El empate hay que resolverlo

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
La puntuación se toma del mejor campo, no de la suma

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.

Contra tu propio 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.

Contra el nuestro

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.