Laravel Scout ger ett bekvämt sätt att integrera sökfunktioner i din applikation, men när du använder Typesense kanske du märker att aspekter inte ingår i standardsökmetoden.
Den här artikeln visar hur du korrekt lägger till facettfilter i dina Typesense-sökningar i Laravel Scout.
Grundläggande implementering
Här är en förenklad implementering som visar hur du lägger till aspekter till din Laravel Scout-sökning med Typesense genom att använda rå metod:
public function index() { // Börja med en grundläggande sökfråga $query = Product::search('min sökterm'); // Förbered filtervillkor $filterBy = []; // Till exempel, pris större än 100 eller ditt eget anpassade filter $filterBy[] = 'price:>=100'; // Använd Typesense-specifika alternativ om du vill ha $query->options([ 'query_by' => 'name', 'filter_by' => implode(' && ', $filterBy), 'facet_by' => 'varumärke,kategori,pris', // Begär dessa aspekter, se till att dessa aspekter är tillgängliga från 'Typsensort' => $request->input('sort_by', 'relevance:desc') ]); // Få paginerade resultat $results = $query->paginate(24); // Lägg till facettantal till de paginerade resultaten $results->facetCounts = $this->getFacets($query); returnera $results; } /** * Hämta aspekter från Typesense-sökresultaten */ privat funktion getFacets($query) { $raw = $query->raw(); returnera $rawl['facet_counts'] ?? []; }Valfritt: Formatera om facetter för enklare användning
Du kan också formatera om aspekterna för att göra dem lättare att arbeta med i din applikation:
/** * Formatera om Typesense-facetter för enklare användning * * @param array $facets Den råa facetten räknas från Typesense * @return \Illuminate\Support\Collection */ privat funktion reformatFacets(array $facets): \Illuminate\Support\Collection { $result { $result; foreach ($facets som $facet) { $fieldName = $facet['field_name'] ?? null; if (!$fieldName) { fortsätt; } $counts = collect($facet['counts'] ?? [])->map(function($item) { return [ 'value' => $item['value'], 'count' => $item['count'] ]; }); $result[$fieldName] = $counts; } returnera $result; }Använda aspekterna i din applikation
För att använda de omformaterade aspekterna, ändra helt enkelt den tidigare sökmetoden:
// Få paginerade resultat $results = $query->paginate(24); // Få råa facetträkningar från Typesense $facets = $query->raw()['facet_counts'] ?? []; // Lägg till omformaterade fasetter till de sidnumrerade resultaten $results->facetCounts = $this->reformatFacets($facets); returnera $results;Viktiga punkter att komma ihåg
- Använd
facet_byalternativ för att ange vilka fält du vill ha fasetter för - Få tillgång till råa aspektdata från sökfrågan med
$query->raw()['facet_counts'] - Överväg att formatera om aspekterna för att göra dem lättare att arbeta med i din applikation
- Bifoga aspekterna till dina paginerade resultat så att de är tillgängliga i dina vyer
Genom att implementera dessa tekniker kan du enkelt lägga till kraftfulla facetterade filtreringsfunktioner till din Laravel-applikation med Typesense, så att användare kan förfina sina sökresultat efter olika kriterier.
Senast uppdaterad 3 mars 2025
