Esploratore Laravel fornisce un modo pratico per integrare la funzionalità di ricerca nella tua applicazione, ma quando usi Typesense potresti notare che le sfaccettature non sono incluse nel metodo di ricerca predefinito.
Questo articolo spiega come aggiungere correttamente filtri a sfaccettature alle ricerche Typesense in Laravel Scout.
Implementazione di base
Ecco un'implementazione semplificata che mostra come aggiungere sfaccettature alla ricerca Laravel Scout con Typesense utilizzando metodo grezzo:
public function index() { // Inizia con una query di ricerca di base $query = Product::search('my searchterm'); // Prepara le condizioni del filtro $filterBy = []; // Ad esempio, prezzo maggiore di 100 o il tuo set di filtri personalizzato $filterBy[] = 'price:>=100'; // Applica le opzioni specifiche di Typesense se lo desideri $query->options([ 'query_by' => 'name', 'filter_by' => implode(' && ', $filterBy), 'facet_by' => 'brand,category,price', // Richiedi queste sfaccettature da Typesense, assicurati che siano disponibili 'sort_by' => $request->input('sort_by', 'relevance:desc') ]); // Ottieni risultati suddivisi in pagine $results = $query->paginate(24); // Aggiungi conteggi delle sfaccettature ai risultati suddivisi in pagine $results->facetCounts = $this->getFacets($query); return $results; } /** * Ottieni le sfaccettature dai risultati della ricerca Typesense */ private function getFacets($query) { $raw = $query->raw(); return $raw['facet_counts'] ?? []; }Facoltativo: riformattazione delle sfaccettature per un utilizzo più semplice
Puoi anche riformattare le sfaccettature per renderle più facili da usare nella tua applicazione:
/** * Riformatta le sfaccettature di Typesense per un utilizzo più semplice * * @param array $facets Conteggi delle sfaccettature non elaborate da 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; } restituisci $result; }Utilizzo delle sfaccettature nella tua applicazione
Per utilizzare le sfaccettature riformattate, è sufficiente modificare il metodo di ricerca precedente:
// Ottieni risultati suddivisi in pagine $results = $query->paginate(24); // Ottieni conteggi delle sfaccettature grezze da Typesense $facets = $query->raw()['facet_counts'] ?? []; // Aggiungi sfaccettature riformattate ai risultati suddivisi in pagine $results->facetCounts = $this->reformatFacets($facets); return $results;Punti chiave da ricordare
- Utilizzare il
sfaccettatura_peropzione per specificare per quali campi si desidera avere le sfaccettature - Accedi ai dati sfaccettati grezzi dalla query di ricerca con
$query->raw()['conteggi_facet'] - Prendi in considerazione la riformattazione delle sfaccettature per renderle più facili da usare nella tua applicazione
- Allega le sfaccettature ai risultati impaginati in modo che siano accessibili nelle tue viste
Implementando queste tecniche, puoi facilmente aggiungere potenti funzionalità di filtro a sfaccettature alla tua applicazione Laravel con Typesense, consentendo agli utenti di perfezionare i risultati di ricerca in base a vari criteri.
Ultimo aggiornamento il 3 marzo 2025
