É o repositório Monorepo:
A idéia é criar um adaptador InstantSearch para PageFind e criar o mesmo site de demonstração que eu fiz para facetas. Dessa forma, podemos comparar "maçãs com maçãs".
Para isso, eu queria usar o mesmo esquema que em facetas :
Comecei a implementação com conversão codificada. Consegui criar uma demonstração de trabalho. No entanto, percebi que a PageFind não pode ser usada como um mecanismo de pesquisa em facetas em geral.
PageFind suporta apenas valores de string, portanto, todos os valores precisam ser convertidos em strings antes de indexar e voltar ao tipo inicial no lado do cliente.
Indexação:
brand : [ item . brand ] ,
categories : item . categories ,
price : [ ` ${ item . price } ` ] ,
rating : [ ` ${ item . rating } ` ] ,
free_shipping : [ ` ${ item . free_shipping } ` ] ,Lado do cliente:
{
objectID : item . id ,
... data . meta ,
categories : data . filters . categories ,
price : parseFloat ( data . filters . price [ 0 ] ) ,
rating : parseFloat ( data . filters . rating [ 0 ] ) ,
}Ver:
Como não há suporte para números para obter estatísticas, precisamos converter strings em números no lado do cliente e calcular estatí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 ) ,
} ;
} Não implementei um filtro para campos numéricos, como price >= 40 AND price <= 100 . O controle deslizante de preços não funciona no deme
Depois que percebi que não era prático usar um mecanismo de busca facetado em geral, desisti e não terminei o código para a transformação do esquema.
Este código não é recomendado para uso de produção .
pnpm i
pnpm run devfacets