Närbild av kikare på en yta med solnedgångsreflektion i linser.

Laravel Scout med Typesense facettfilter

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'] ?? []; }

🤓😎 Fler och fler människor får våra tips om nördar, integritet, utveckling och livsstil

Vill du få de senaste bloggarna om nördar, integritet, utveckling och livsstil? Prenumerera på vårt nyhetsbrev.

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_by alternativ 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

Lämna en kommentar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *

sv_SESvenska
Bläddra till toppen