diff --git a/sepa/sitio2/src/routes/search/[query]/+page.server.ts b/sepa/sitio2/src/routes/search/[query]/+page.server.ts index 59f4f6f..55fd8c0 100644 --- a/sepa/sitio2/src/routes/search/[query]/+page.server.ts +++ b/sepa/sitio2/src/routes/search/[query]/+page.server.ts @@ -16,11 +16,17 @@ export const load: PageServerLoad = async ({ params }) => { // // 'datasets.id_comercio = latest_datasets.id_comercio AND datasets.date = latest_datasets.max_date' // )) - const query = params.query; + const query = params.query + .replaceAll(/á/giu, 'a') + .replaceAll(/é/giu, 'e') + .replaceAll(/í/giu, 'i') + .replaceAll(/ó/giu, 'o') + .replaceAll(/ú/giu, 'u') + .replaceAll(/ñ/giu, 'n'); const productos = await db.execute<{ id_producto: string; productos_descripcion: string; - productos_marca: string; + productos_marca: string | null; in_datasets_count: number; }>(sql` SELECT id_producto, productos_descripcion, productos_marca, @@ -46,7 +52,7 @@ WHERE p.id_producto = index.id_producto) as in_datasets_count const existingProduct = acc.find((p) => p.id_producto === producto.id_producto); if (existingProduct) { existingProduct.descriptions.push(producto.productos_descripcion); - existingProduct.marcas.add(producto.productos_marca); + if (producto.productos_marca) existingProduct.marcas.add(producto.productos_marca); existingProduct.in_datasets_count = Math.max( existingProduct.in_datasets_count, producto.in_datasets_count @@ -55,7 +61,7 @@ WHERE p.id_producto = index.id_producto) as in_datasets_count acc.push({ id_producto: producto.id_producto, descriptions: [producto.productos_descripcion], - marcas: new Set([producto.productos_marca]), + marcas: new Set(producto.productos_marca ? [producto.productos_marca] : []), in_datasets_count: producto.in_datasets_count }); } diff --git a/sepa/sitio2/src/routes/search/[query]/+page.svelte b/sepa/sitio2/src/routes/search/[query]/+page.svelte index 1e98da3..ab511db 100644 --- a/sepa/sitio2/src/routes/search/[query]/+page.svelte +++ b/sepa/sitio2/src/routes/search/[query]/+page.svelte @@ -8,6 +8,17 @@ import { goto } from '$app/navigation'; export let data: PageData; + + function parseMarcas(marcas: readonly string[]) { + const x = marcas + .map((m) => m.trim().replaceAll(/['`´]/g, '')) + .filter((m) => !['sin marca', 'VARIOS'].includes(m)) + .filter((m) => m.length > 0); + if (x.length === 0) { + return ['n/a']; + } + return Array.from(new Set(x)); + } @@ -21,28 +32,31 @@

Resultados para "{data.query}"

- {#each data.collapsedProductos as producto} - - - - {Array.from(producto.marcas) - .filter((m) => !['sin marca', 'VARIOS'].includes(m)) - .filter((m) => m?.trim().length > 0) - .join('/')} - en {producto.in_datasets_count} cadenas - EAN {producto.id_producto} - - - {#each producto.descriptions as description} - {description} - {#if description !== producto.descriptions[producto.descriptions.length - 1]} - {' '} - {/if} - {/each} - - - - {/each} + {#if data.collapsedProductos.length === 0} +

+ No se encontraron resultados para "{data.query}". Tené en cuenta que actualmente, el algoritmo + de búsqueda es muy básico. Probá buscando palabras clave como "alfajor", "ketchup" o + "lenteja". +

+ {:else} + {#each data.collapsedProductos as producto} + + + + {parseMarcas(Array.from(producto.marcas)).join('/')} + en {producto.in_datasets_count} cadenas + EAN {producto.id_producto} + + + {#each producto.descriptions as description} + {description} + {#if description !== producto.descriptions[producto.descriptions.length - 1]} + {' '} + {/if} + {/each} + + + + {/each} + {/if}