Es el repositorio de Monorepo:
La idea es crear un adaptador de InstantSearch para Pagefind y crear el mismo sitio de demostración que yo para las facetas. De esta manera podemos comparar "manzanas con manzanas".
Para hacerlo, quería usar el mismo esquema que en las facetas :
Comencé a implementación con conversión codificada. Logré crear una demostración de trabajo. Sin embargo, me di cuenta de que PageFind no se puede usar como un motor de búsqueda facetado general.
PageFind solo admite valores de cadena, por lo que todos los valores deben convertirse en cadenas antes de indexar y volver al tipo inicial en el lado del cliente.
Indexación:
brand : [ item . brand ] ,
categories : item . categories ,
price : [ ` ${ item . price } ` ] ,
rating : [ ` ${ item . rating } ` ] ,
free_shipping : [ ` ${ item . free_shipping } ` ] ,Lado del cliente:
{
objectID : item . id ,
... data . meta ,
categories : data . filters . categories ,
price : parseFloat ( data . filters . price [ 0 ] ) ,
rating : parseFloat ( data . filters . rating [ 0 ] ) ,
}Ver:
Debido a que no hay soporte para los números para obtener estadísticas, necesitamos convertir cadenas a números en el lado del cliente y calcular estadísticas:
if ( schema [ field ] ?. type === "number" ) {
const values : number [ ] = [ ] ;
entries . forEach ( ( a ) => values . push ( parseFloat ( a [ 0 ] ) ) ) ;
facetsStats [ field ] = {
min : Math . min ( ... values ) ,
max : Math . max ( ... values ) ,
} ;
} No implementé un filtro para campos numéricos, como price >= 40 AND price <= 100 . El control deslizante de precios no funciona en la deme
Después de darme cuenta de que no era práctico usar un motor de búsqueda facetado general que renuncié y no terminé el código para la transformación de esquemas.
Este código no se recomienda para el uso de la disco .
pnpm i
pnpm run devfacets