Explorador de Laravel proporciona una forma conveniente de integrar la funcionalidad de búsqueda en su aplicación, pero al usar Typesense, es posible que observe que las facetas no están incluidas en el método de búsqueda predeterminado.
Este artículo demuestra cómo agregar correctamente filtros de facetas a sus búsquedas de Typesense en Laravel Scout.
Implementación básica
Aquí hay una implementación simplificada que muestra cómo agregar facetas a su búsqueda de Laravel Scout con Typesense usando el método crudo:
public function index() { // Comience con una consulta de búsqueda básica $query = Product::search('my searchterm'); // Prepare las condiciones del filtro $filterBy = []; // Por ejemplo, precio mayor a 100 o su propio filtro personalizado $filterBy[] = 'price:>=100'; // Aplique opciones específicas de Typesense si lo desea $query->options([ 'query_by' => 'name', 'filter_by' => implode(' && ', $filterBy), 'facet_by' => 'brand,category,price', // Solicite estas facetas a Typesense, asegúrese de que estén disponibles 'sort_by' => $request->input('sort_by', 'relevance:desc') ]); // Obtener resultados paginados $results = $query->paginate(24); // Agregar recuentos de facetas a los resultados paginados $results->facetCounts = $this->getFacets($query); return $results; } /** * Obtener facetas de los resultados de búsqueda de Typesense */ private function getFacets($query) { $raw = $query->raw(); return $raw['facet_counts'] ?? []; }Opcional: Reformateo de facetas para facilitar su uso
También puedes reformatear las facetas para que sea más fácil trabajar con ellas en tu aplicación:
/** * Reformatear facetas de Typesense para un uso más sencillo * * @param array $facets Los recuentos de facetas sin procesar de Typesense * @return \Illuminate\Support\Collection */ private function reformatFacets(array $facets): \Illuminate\Support\Collection { $result = collect(); foreach ($facets as $facet) { $fieldName = $facet['field_name'] ?? null; if (!$fieldName) { continue; } $counts = collect($facet['counts'] ?? [])->map(function($item) { return [ 'valor' => $item['valor'], 'count' => $item['count'] ]; }); $result[$fieldName] = $counts; } return $result; }Uso de las facetas en su aplicación
Para utilizar las facetas reformateadas, simplemente modifique el método de búsqueda anterior:
// Obtener resultados paginados $results = $query->paginate(24); // Obtener recuentos de facetas sin procesar de Typesense $facets = $query->raw()['facet_counts'] ?? []; // Agregar facetas reformateadas a los resultados paginados $results->facetCounts = $this->reformatFacets($facets); return $results;Puntos clave para recordar
- Utilice el
faceta_porOpción para especificar para qué campos desea facetas - Acceda a los datos de facetas sin procesar de la consulta de búsqueda con
$query->raw()['cuenta_caras'] - Considere reformatear las facetas para que sea más fácil trabajar con ellas en su aplicación.
- Adjunte las facetas a sus resultados paginados para que sean accesibles en sus vistas
Al implementar estas técnicas, puede agregar fácilmente potentes capacidades de filtrado por facetas a su aplicación Laravel con Typesense, lo que permite a los usuarios refinar sus resultados de búsqueda mediante varios criterios.
Última actualización: 3 de marzo de 2025
