C'est le référentiel Monorepo:
L'idée est de créer un adaptateur InstantSearch pour PageFind et de construire le même site de démonstration que pour les facettes. De cette façon, nous pouvons comparer les "pommes aux pommes".
Pour ce faire, je voulais utiliser le même schéma que dans les facettes :
J'ai commencé la mise en œuvre avec une conversion codée en dur. J'ai réussi à créer une démo de travail. Cependant, j'ai réalisé que PageFind ne peut pas être utilisé comme moteur de recherche à facettes générales.
PageFind prend en charge uniquement les valeurs de chaîne, de sorte que toutes les valeurs doivent être converties en chaînes avant d'indexer et de revenir au type initial du côté client.
Indexage:
brand : [ item . brand ] ,
categories : item . categories ,
price : [ ` ${ item . price } ` ] ,
rating : [ ` ${ item . rating } ` ] ,
free_shipping : [ ` ${ item . free_shipping } ` ] ,Côté client:
{
objectID : item . id ,
... data . meta ,
categories : data . filters . categories ,
price : parseFloat ( data . filters . price [ 0 ] ) ,
rating : parseFloat ( data . filters . rating [ 0 ] ) ,
}Voir:
Parce qu'il n'y a pas de prise en charge des nombres pour obtenir des statistiques, nous devons convertir les chaînes en numéros du côté client et calculer les statistiques:
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 ) ,
} ;
} Je n'ai pas implémenté de filtre pour les champs numériques, comme price >= 40 AND price <= 100 . Le curseur de prix ne fonctionne pas dans le deme
Après avoir réalisé qu'il n'était pas pratique d'utiliser un moteur de recherche à facettes générales, j'ai abandonné et je n'ai pas terminé le code pour la transformation du schéma.
Ce code n'est pas recommandé pour l'utilisation de Prodcution .
pnpm i
pnpm run devfacets