Introduzione
Laravel Scout è una soluzione semplice e basata su driver per aggiungere la ricerca full-text ai modelli Eloquent. Grazie a un model observer sincronizza automaticamente i record Eloquent con l’indice di ricerca. Scout include un enginedatabase integrato che sfrutta gli indici full-text di MySQL/PostgreSQL e la clausola LIKE per cercare direttamente nel database, senza servizi esterni. In produzione, per applicazioni grandi che richiedono tolleranza ai typo, ricerca a faccette o ricerca geografica, sono utili gli engine esterni.
Engine supportati
Installazione
Installa il pacchetto con Composer.vendor:publish. Viene generato config/scout.php.
Laravel\Scout\Searchable ai modelli che vuoi rendere ricercabili. Il trait registra il model observer e abilita la sincronizzazione automatica con il driver di ricerca.
Configurazione della coda
Se usi un engine diverso dadatabase o collection, è fortemente consigliato configurare un driver di coda prima di usare Scout. Con un queue worker attivo le operazioni di sincronizzazione dell’indice avvengono in background e la reattività della UI migliora molto.
Imposta a true l’opzione queue in config/scout.php.
Job unique
Nelle app con molte scritture, potresti voler evitare che vengano accodati job duplicati per lo stesso record. Registrando le classiMakeSearchableUniquely e RemoveFromSearchUniquely in config/scout.php puoi usare job di indicizzazione unique. Di solito lo configuri nel metodo boot di un service provider.
Prerequisiti dei driver
Algolia
Se usi il driver Algolia, impostaid e secret in config/scout.php e installa l’SDK PHP di Algolia.
.env.
Configurazione dell’indice
Con Algolia puoi gestire le impostazioni dell’indice daconfig/scout.php.
scout:sync-index-settings per applicarla ad Algolia.
Meilisearch
Meilisearch è un motore di ricerca open source molto veloce. In sviluppo locale il modo più semplice è usarne l’immagine Docker con Laravel Sail..env.
Configurazione dell’indice (Meilisearch)
In Meilisearch devi pre-registrare le colonne su cui filtri conwhere() in filterableAttributes e quelle su cui ordini con orderBy() in sortableAttributes.
>, < ecc.) solo su dati del tipo corretto.
scout:sync-index-settings.
Typesense
Typesense è un motore di ricerca open source veloce che supporta ricerca per keyword, semantica, geografica e vettoriale..env.
toSearchableArray devi castare la primary key a stringa e la data di creazione a timestamp UNIX.
Engine database / collection
Se non vuoi introdurre servizi esterni, sono le opzioni migliori. L’engine database usa gli indici full-text di MySQL/PostgreSQL e la clausolaLIKE. Per la maggior parte delle applicazioni è sufficiente.
Con l’engine database, a differenza degli engine esterni, non serve gestire manualmente l’indice: la ricerca avviene direttamente sulla tabella.
Trait Searchable
Personalizzare toSearchableArray()
Per default, l’intero risultato ditoArray() viene salvato nell’indice. Per personalizzare i dati sincronizzati, sovrascrivi toSearchableArray.
Personalizzare il nome dell’indice
Di default viene usato il nome della tabella (plurale) come nome dell’indice. Puoi personalizzarlo sovrascrivendosearchableAs.
Strategie di ricerca per l’engine database
Con l’engine database puoi indicare, tramite attributi PHP, una strategia di ricerca efficiente per colonna.Rendere ricercabili condizionalmente
Per rendere ricercabile un modello solo in certe condizioni, definiscishouldBeSearchable.
Gestione dell’indice
I comandi di questa sezione riguardano principalmente engine di terze parti come Algolia, Meilisearch, Typesense. Con l’engine database non serve gestire l’indice.
Importare record esistenti
Quando introduci Scout in un progetto esistente, importa i record conscout:import.
Svuotare l’indice
Per rimuovere tutti i record del modello dall’indice usascout:flush.
Pausa dell’indicizzazione
Per interrompere temporaneamente la sincronizzazione con l’indice durante operazioni Eloquent, usawithoutSyncingToSearch.
Aggiunta / rimozione manuale
Puoi aggiungere all’indice una collezione di modelli tramite query.unsearchable.
delete di un modello lo rimuove automaticamente anche dall’indice.
Ricerca
Consearch cerchi sul modello. Concatena get per ottenere una collezione di modelli Eloquent.
raw.
Paginazione
Conpaginate puoi paginare i risultati come nelle query Eloquent normali.
simplePaginate, più efficiente su grandi dataset perché non calcola il totale.
Filtri e ordinamento
Conwhere aggiungi condizioni di filtro alla query di ricerca.
query puoi personalizzare la query Eloquent.
Eager Loading
Scout prima ottiene la lista di ID dal motore di ricerca, poi recupera i modelli con Eloquent. Per evitare il problema N+1, indica l’eager loading inquery con with().
makeAllSearchableUsing.
Soft delete
Se il modello indicizzato usa il soft delete e vuoi cercare anche i modelli cancellati, imposta l’opzionesoft_delete in config/scout.php a true.
withTrashed o onlyTrashed puoi includere i record cancellati.
Engine personalizzati
Se gli engine di default non ti bastano, puoi implementarne uno personalizzato. Un engine personalizzato estende la classe astrattaLaravel\Scout\Engines\Engine e deve implementare questi otto metodi.
Laravel\Scout\Engines\AlgoliaEngine.
L’engine personalizzato si registra su Scout nel metodo boot di App\Providers\AppServiceProvider.
config/scout.php.
Pagine correlate
Eloquent ORM
Uso di base dei modelli Eloquent.
Relazioni Eloquent
Definizione delle relazioni ed eager loading.
Code
Scout può aggiornare l’indice in background grazie alle code.