mirror of
https://github.com/catdevnull/preciazo.git
synced 2024-11-22 14:16:19 +00:00
mejorar búsqueda
This commit is contained in:
parent
b05776a736
commit
245dc2eb02
2 changed files with 48 additions and 28 deletions
|
@ -16,11 +16,17 @@ export const load: PageServerLoad = async ({ params }) => {
|
||||||
// // 'datasets.id_comercio = latest_datasets.id_comercio AND datasets.date = latest_datasets.max_date'
|
// // '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<{
|
const productos = await db.execute<{
|
||||||
id_producto: string;
|
id_producto: string;
|
||||||
productos_descripcion: string;
|
productos_descripcion: string;
|
||||||
productos_marca: string;
|
productos_marca: string | null;
|
||||||
in_datasets_count: number;
|
in_datasets_count: number;
|
||||||
}>(sql`
|
}>(sql`
|
||||||
SELECT id_producto, productos_descripcion, productos_marca,
|
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);
|
const existingProduct = acc.find((p) => p.id_producto === producto.id_producto);
|
||||||
if (existingProduct) {
|
if (existingProduct) {
|
||||||
existingProduct.descriptions.push(producto.productos_descripcion);
|
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 = Math.max(
|
||||||
existingProduct.in_datasets_count,
|
existingProduct.in_datasets_count,
|
||||||
producto.in_datasets_count
|
producto.in_datasets_count
|
||||||
|
@ -55,7 +61,7 @@ WHERE p.id_producto = index.id_producto) as in_datasets_count
|
||||||
acc.push({
|
acc.push({
|
||||||
id_producto: producto.id_producto,
|
id_producto: producto.id_producto,
|
||||||
descriptions: [producto.productos_descripcion],
|
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
|
in_datasets_count: producto.in_datasets_count
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,6 +8,17 @@
|
||||||
import { goto } from '$app/navigation';
|
import { goto } from '$app/navigation';
|
||||||
|
|
||||||
export let data: PageData;
|
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));
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<svelte:head>
|
<svelte:head>
|
||||||
|
@ -21,28 +32,31 @@
|
||||||
</Button>
|
</Button>
|
||||||
<SearchBar />
|
<SearchBar />
|
||||||
<h1 class="my-2 text-2xl font-bold">Resultados para "{data.query}"</h1>
|
<h1 class="my-2 text-2xl font-bold">Resultados para "{data.query}"</h1>
|
||||||
{#each data.collapsedProductos as producto}
|
{#if data.collapsedProductos.length === 0}
|
||||||
<a href={`/id_producto/${producto.id_producto}`} class="my-2 block">
|
<p class="my-2 text-gray-600">
|
||||||
<Card.Root class="transition-colors duration-200 hover:bg-gray-100">
|
No se encontraron resultados para "{data.query}". Tené en cuenta que actualmente, el algoritmo
|
||||||
<Card.Header class="block px-3 py-2 pb-0">
|
de búsqueda es muy básico. Probá buscando palabras clave como "alfajor", "ketchup" o
|
||||||
<Badge
|
"lenteja".
|
||||||
>{Array.from(producto.marcas)
|
</p>
|
||||||
.filter((m) => !['sin marca', 'VARIOS'].includes(m))
|
{:else}
|
||||||
.filter((m) => m?.trim().length > 0)
|
{#each data.collapsedProductos as producto}
|
||||||
.join('/')}</Badge
|
<a href={`/id_producto/${producto.id_producto}`} class="my-2 block">
|
||||||
>
|
<Card.Root class="transition-colors duration-200 hover:bg-gray-100">
|
||||||
<Badge variant="outline">en {producto.in_datasets_count} cadenas</Badge>
|
<Card.Header class="block px-3 py-2 pb-0">
|
||||||
<Badge variant="outline">EAN {producto.id_producto}</Badge>
|
<Badge>{parseMarcas(Array.from(producto.marcas)).join('/')}</Badge>
|
||||||
</Card.Header>
|
<Badge variant="outline">en {producto.in_datasets_count} cadenas</Badge>
|
||||||
<Card.Content class="px-3 py-2">
|
<Badge variant="outline">EAN {producto.id_producto}</Badge>
|
||||||
{#each producto.descriptions as description}
|
</Card.Header>
|
||||||
<span>{description}</span>
|
<Card.Content class="px-3 py-2">
|
||||||
{#if description !== producto.descriptions[producto.descriptions.length - 1]}
|
{#each producto.descriptions as description}
|
||||||
<span class="text-gray-500">⋅</span>{' '}
|
<span>{description}</span>
|
||||||
{/if}
|
{#if description !== producto.descriptions[producto.descriptions.length - 1]}
|
||||||
{/each}
|
<span class="text-gray-500">⋅</span>{' '}
|
||||||
</Card.Content>
|
{/if}
|
||||||
</Card.Root>
|
{/each}
|
||||||
</a>
|
</Card.Content>
|
||||||
{/each}
|
</Card.Root>
|
||||||
|
</a>
|
||||||
|
{/each}
|
||||||
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
|
|
Loading…
Reference in a new issue