Vue rapprochée de jumelles sur une surface avec le reflet du coucher de soleil dans les lentilles.

Laravel Scout avec filtres à facettes Typesense

Laravel Scout fournit un moyen pratique d'intégrer la fonctionnalité de recherche dans votre application, mais lorsque vous utilisez Typesense, vous remarquerez peut-être que les facettes ne sont pas incluses dans la méthode de recherche par défaut.

Cet article montre comment ajouter correctement des filtres à facettes à vos recherches Typesense dans Laravel Scout.

Mise en œuvre de base

Voici une implémentation simplifiée qui montre comment ajouter des facettes à votre recherche Laravel Scout avec Typesense en utilisant le méthode brute:

public function index() { // Commencez par une requête de recherche de base $query = Product::search('my searchterm'); // Préparez les conditions de filtre $filterBy = []; // Par exemple, un prix supérieur à 100 ou votre propre filtre personnalisé $filterBy[] = 'price:>=100'; // Appliquez les options spécifiques à Typesense si vous le souhaitez $query->options([ 'query_by' => 'name', 'filter_by' => implode(' && ', $filterBy), 'facet_by' => 'brand,category,price', // Demandez ces facettes à Typesense, assurez-vous que ces facettes sont disponibles 'sort_by' => $request->input('sort_by', 'relevance:desc') ]); // Obtenir les résultats paginés $results = $query->paginate(24); // Ajouter le nombre de facettes aux résultats paginés $results->facetCounts = $this->getFacets($query); return $results; } /** * Obtenir les facettes à partir des résultats de recherche Typesense */ private function getFacets($query) { $raw = $query->raw(); return $raw['facet_counts'] ?? []; }

🤓😎 De plus en plus de personnes reçoivent nos conseils en geekerie, confidentialité, développement et style de vie

Vous souhaitez recevoir les derniers articles de blog sur la technologie, la confidentialité, le développement et le style de vie ? Abonnez-vous à notre newsletter.

Facultatif : reformater les facettes pour une utilisation plus facile

Vous pouvez également reformater les facettes pour les rendre plus faciles à utiliser dans votre application :

/** * Reformater les facettes Typesense pour une utilisation plus facile * * @param array $facets Le nombre de facettes brutes 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 [ 'value' => $item['value'], 'count' => $item['count'] ]; }); $result[$fieldName] = $counts; } renvoie $result; }

Utiliser les facettes dans votre application

Pour utiliser les facettes reformatées, modifiez simplement la méthode de recherche précédente :

// Obtenir les résultats paginés $results = $query->paginate(24); // Obtenir le nombre de facettes brutes à partir de Typesense $facets = $query->raw()['facet_counts'] ?? []; // Ajouter des facettes reformatées aux résultats paginés $results->facetCounts = $this->reformatFacets($facets); return $results;

Points clés à retenir

  • Utilisez le facet_by option pour spécifier les champs pour lesquels vous souhaitez des facettes
  • Accédez aux données de facettes brutes à partir de la requête de recherche avec $query->raw()['facet_counts']
  • Envisagez de reformater les facettes pour les rendre plus faciles à utiliser dans votre application
  • Attachez les facettes à vos résultats paginés afin qu'ils soient accessibles dans vos vues

En mettant en œuvre ces techniques, vous pouvez facilement ajouter de puissantes capacités de filtrage à facettes à votre application Laravel avec Typesense, permettant aux utilisateurs d'affiner leurs résultats de recherche selon divers critères.

Dernière mise à jour le 3 mars 2025

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

fr_FRFrançais
Défiler vers le haut