Fulltekstsøk er avgjørende for at brukerne kan navigere på innholdsrike nettsteder. I dette innlegget vil jeg vise deg hvordan du implementerer fulltekstsøk for en Laravel-app. Faktisk bruker vi Laravel Scout-biblioteket, som gjør implementering av fulltekstsøk enkelt og morsomt.
Hva er Laravel Scout? Den offisielle dokumentasjonen oppsummerer det slik:
Laravel Scout gir en enkel, sjåførbasert løsning for å legge til fulltekstsøk i Eloquent-modellene dine. Ved hjelp av modellobservatører vil Scout automatisk holde søkeindeksene dine synkronisert med dine Eloquent-poster.
I utgangspunktet er Laravel Scout et bibliotek som styrer manipulering av indeksen når det er en endring i modelldataene. Stedet der dataene skal indekseres avhenger av driveren du har konfigurert med Scout-biblioteket.
Fra nå av støtter Scout-biblioteket Algolia, en skybasert søkemotor-API, og det er det vi skal bruke i denne artikkelen for å demonstrere fulltekstsøkingsimplementering.
Vi starter med å installere Scout og Algolia-serverbiblioteker, og når vi går videre, går vi gjennom et ekte eksempel for å demonstrere hvordan du kan indeksere og søke dataene dine.
I denne delen skal vi installere de avhengighetene som kreves for å få Scout-biblioteket til å fungere sammen med Laravel. Etter installasjonen må vi gå gjennom en del konfigurasjoner slik at Laravel kan oppdage Scout-biblioteket.
La oss fortsette å installere Scout-biblioteket ved å bruke Komponist.
$ komponist krever laravel / speider
Det er ganske mye så langt som Scout-bibliotekets installasjon er opptatt av. Nå som vi har installert Scout-biblioteket, la oss sørge for at Laravel vet om det.
Arbeid med Laravel, du er sikkert klar over konseptet av en tjenesteleverandør, som lar deg konfigurere tjenester i søknaden din. Når du vil aktivere en ny tjeneste i Laravel-applikasjonen din, må du bare legge til en tilhørende tjenesteleverandørinngang i config / app.php
.
Hvis du ikke er kjent med Laravel-tjenesteleverandører ennå, vil jeg sterkt anbefale at du gjør deg selv en tjeneste og gå gjennom denne innledende artikkelen som forklarer det grunnleggende om tjenesteleverandører i Laravel.
I vårt tilfelle trenger vi bare å legge til ScoutServiceProvider
leverandør til listen over tjenesteleverandører i config / app.php
, som vist i følgende utdrag.
... 'leverandører' => [/ * * Laravel Work Service Providers ... * / Illuminate \ Auth \ AuthServiceProvider :: klasse, Illuminate \ Broadcasting \ BroadcastServiceProvider :: klasse, Illuminate \ buss \ BusServiceProvider :: klasse, Illuminate \ Cache \ CacheServiceProvider: : klasse, Illuminate \ Foundation \ Providers \ ConsoleSupportServiceProvider :: klasse, Illuminate \ Cookie \ CookieServiceProvider :: klasse, Illuminate \ Database \ DatabaseServiceProvider :: klasse, Illuminate \ kryptering \ EncryptionServiceProvider :: klasse, Illuminate \ Filesystem \ FilesystemServiceProvider :: klasse, belyse \ Foundation \ Providers \ FoundationServiceProvider :: klasse, Illuminate \ Hashing \ HashServiceProvider :: klasse, Illuminate \ Mail \ MailServiceProvider :: klasse, Illuminate \ Meldinger \ NotificationServiceProvider :: klasse, Illuminate \ paginering \ PaginationServiceProvider :: klasse, Illuminate \ Pipeline \ PipelineServiceProvider :: Klasse, Lys \ Kjøre \ QueueServiceProvider :: Klasse, Lys \ Redis \ RedisServiceProvider :: Klasse, Lyser \ Auth \ Passord \ PasswordResetServ iceProvider :: class, Illuminate \ Session \ SessionServiceProvider :: klassen, Lyser \ Oversettelse \ OversettelseServiceProvider :: klasse, Lyser \ Validering \ ValidasjonServiceProvider :: klasse, Lyser \ Vis \ VisServiceProvider :: klasse, / * * Pakkeleverandører ... * / Laravel \ Tinker \ TinkerServiceProvider :: klasse, / * * Applikasjonsleverandører ... * / App \ Providers \ AppServiceProvider :: klasse, App \ Providers \ AuthServiceProvider :: klasse, App \ Providers \ BroadcastServiceProvider :: klasse, App \ Providers \ EventServiceProvider :: klasse, App \ Providers \ RouteServiceProvider :: klasse, Laravel \ Scout \ ScoutServiceProvider :: klasse,], ...
Nå, Laravel er klar over ScoutServiceProvider
tjenesteleverandør. Scout-biblioteket leveres med en konfigurasjonsfil som lar oss angi API-legitimasjon.
La oss gå videre og publisere eiendelene som tilbys av Scout-biblioteket ved hjelp av følgende kommando.
$ php artisan leverandør: publiser --provider = "Laravel \ Scout \ ScoutServiceProvider" Kopiert fil [/vendor/laravel/scout/config/scout.php] Til [/config/scout.php] Publisering er fullført.
Som du kan se, har den kopiert leverandør / laravel / speider / config / scout.php
fil til config / scout.php
.
Deretter går du videre og oppretter en konto hos Algolia, ettersom vi trenger API-legitimasjon i utgangspunktet. Når du har API-informasjonen, la oss gå videre og konfigurere de nødvendige innstillingene i config / scout.php
fil, som vist i følgende utdrag.
env ('SCOUT_DRIVER', 'algolia'), / * | ------------------------------------ -------------------------------------- | Indeksprefiks | ----------------------------------------------- --------------------------- | | Her kan du angi et prefiks som vil bli brukt på all søkeindeks | navn som brukes av Scout. Dette prefikset kan være nyttig hvis du har flere | "Leietakere" eller applikasjoner som deler samme søkeinfrastruktur. | * / 'prefix' => env ('SCOUT_PREFIX', "), / * | ------------------------------- ------------------------------------------- | Queue Data Syncing | - -------------------------------------------------- ---------------------- | | Dette alternativet lar deg kontrollere om operasjonene som synkroniserer dataene dine med søkemotorene er i kø. Når dette er satt til «true» da | alle automatiske datasynkronisering vil komme i kø for bedre ytelse. | * / 'queue' => env ('SCOUT_QUEUE', feil), / * | -------------- -------------------------------------------------- ---------- | Chunk Størrelser | ------------------------------------ -------------------------------------- | | Disse alternativene gir deg mulighet til å styre maksimalt stykkstørrelse når du er | masse import av data i søkemotoren. Dette gjør at du kan finjustere hver av disse størrelsestykkene basert på serverens kraft. | * / 'chunk' => ['searchable' => 500, 'unsearchable '=> 500,], / * | ---------------------------------------- ---------------------------------- | Myke sletter | ----------------------------------------------- --------------------------- | | Dette alternativet lar deg kontrollere om du vil beholde myke slettede poster i | søkeindeksene. Opprettholde myke slettede poster kan være nyttig | hvis søknaden din fortsatt trenger å søke etter postene senere. | * / 'soft_delete' => false, / * | -------------------------------------- ------------------------------------ | Algolia-konfigurasjon | ----------------------------------------------- --------------------------- | | Her kan du konfigurere Algolys innstillinger. Algolia er en sky vert | søkemotor som fungerer bra med speider ut av boksen. Bare plugg | i applikasjons-ID og admin-API-nøkkelen for å komme i gang med å søke. | * / 'algolia' => ['id' => env ('ALGOLIA_APP_ID', 'STQK4DEGMA'), 'hemmelig' => env ('ALGOLIA_SECRET', '6ef572194f70201ed7ad102cc9f90e05')]];
Vær oppmerksom på at vi har satt verdien av SCOUT_DRIVER
til algolia
sjåfør. Dermed er det nødvendig at du konfigurerer de nødvendige innstillingene for Algolia-driveren på slutten av filen. I utgangspunktet trenger du bare å sette id
og hemmelig
som du har fra Algolia-kontoen.
Som du ser, henter vi verdier fra miljøvariabler. Så la oss sørge for at vi stiller følgende variabler i .env
fil riktig.
... ALGOLIA_APP_ID = STQK4DEGMA ALGOLIA_SECRET = 6ef572194f70201ed7ad102cc9f90e05 ...
Endelig trenger vi å installere Algolia PHP SDK, som vil bli brukt til å samhandle med Algolia ved hjelp av APIer. La oss installere den ved hjelp av komponisten som vist i følgende utdrag.
$ komponist krever algolia / algoliasearch-client-php
Og med det har vi installert alle de avhengighetene som er nødvendige for å poste og indeksere data til Algolytjenesten.
I den forrige delen gjorde vi alt det harde arbeidet med å sette opp Scout og Algolia-bibliotekene, slik at vi kunne indeksere og søke data ved hjelp av Algolys søketjeneste.
I dette avsnittet går vi gjennom et eksempel som viser hvordan du kan indeksere eksisterende data og hente søkeresultater fra Algolia. Jeg antar at du har en standard Post
modell i søknaden din som vi skal bruke i vårt eksempel.
Det første vi må gjøre er å legge til Laravel \ Scout \ Søkbar
trekk til Post
modell. Det gjør det Post
modell søkbar; Laravel synkroniserer postoppføringer med Algolia-indeksen hver gang posten blir lagt til, oppdatert eller slettet.
Med det,
Post
modellen er søkevennlig!Deretter ønsker vi å konfigurere feltene som skal bli indeksert i utgangspunktet. Selvfølgelig vil du ikke indeksere alle feltene i modellen din i Algolia for å holde den effektiv og lett. Faktisk, oftere enn ikke, trenger du ikke det.
Du kan legge til
toSearchableArray
i modellklassen for å konfigurere feltene som skal indekseres./ ** * Få indeksable data array for modellen. * * @return array * / offentlig funksjon toSearchableArray () $ array = $ this-> toArray (); returnere array ('id' => $ array ['id'], 'navn' => $ array ['navn']);Nå er vi klare til å importere og indeksere eksisterende
Post
poster i Algolia. Faktisk gjør Scout-biblioteket det enkelt ved å gi følgende artisan-kommando.$ php artisan scout: import "App \ Post"Det skal importere alle postene til
Post
modell på en gang! De er indeksert så snart de er importert, så vi er klare til å spørre poster allerede. Gå videre og undersøk Algolys dashboard for å se importerte poster og andre verktøy.Slik fungerer det helt
I dette avsnittet oppretter vi et eksempel som viser hvordan du utfører søk og CRUD-operasjoner som synkroniseres i sanntid med Algolia-indeksen.
Gå videre og opprett
app / Http / kontrollere / SearchController.php
fil med følgende innhold.få(); // gjør de vanlige tingene her forever ($ innlegg som $ post) // ... offentlig funksjon legg til () // dette innlegget bør indekseres i Algolia med en gang! $ post = nytt innlegg; $ post-> setAttribute ('name', 'Another Post'); $ post-> setAttribute ('user_id', '1'); $ Post-> Lagre (); Offentlig funksjon slett () // dette innlegget bør fjernes fra indeksen i Algolia med en gang! $ post = Post :: finn (1); $ Post-> slett ();Selvfølgelig må vi også legge til de tilknyttede rutene.
Rute :: få ('søk / spørring', 'SearchController @ spørring'); Rute :: få ('søk / legg til', 'SearchController @ add'); Rute :: få ('søk / slett', 'SearchController @ delete');La oss gå gjennom
spørsmål
metode for å se hvordan å utføre et søk i Algolia.Offentlig funksjon spørring () // spørringer til Algolia søkeindeks og returnerer matchede poster som Eloquent Modeller $ posts = Post :: søk ('title') -> get (); // gjør de vanlige tingene her forever ($ innlegg som $ post) // ...Husk at vi laget
Post
modell søkbar ved å legge tilsøkbar
trekk. Dermed erPost
modell kan brukeSøke
Metode for å hente poster fra Algolia-indeksen. I eksemplet ovenfor prøver vi å hente poster som samsvarer medtittel
søkeord.Deretter er det
Legg til
Metode som etterligner arbeidsflyten ved å legge til en ny postrekord.offentlig funksjon legg til () // dette innlegget bør indekseres i Algolia med en gang! $ post = nytt innlegg; $ post-> setAttribute ('name', 'Another Post'); $ post-> setAttribute ('user_id', '1'); $ Post-> Lagre ();Det er ikke noe fancy i ovennevnte kode; det skaper bare en ny postrekord ved hjelp av
Post
modell. MenPost
modellen implementerersøkbar
egenskap, så Laravel gjør litt ekstra arbeid denne gangen ved å indeksere den nyopprettede posten i Algolia. Så som du kan se, er indekseringen gjort i sanntid.Til slutt er det
slette
metode. La oss også gå gjennom det.offentlig funksjon slette () // dette innlegget bør fjernes fra indeksen i Algolia med en gang! $ post = Post :: finn (1); $ Post-> slett ();Som du ville ha forventet, blir platen slettet med en gang fra Algolia-indeksen så snart den er slettet fra databasen.
I utgangspunktet trenger du ingen ekstra innsats fra din side hvis du vil gjøre eksisterende modeller søkbare. Alt håndteres av Scout-biblioteket ved hjelp av modellobservatører.
Og det bringer oss også til slutten av denne artikkelen!
Konklusjon
I dag diskuterte vi hvordan du kan implementere fulltekstsøk i Laravel ved hjelp av Laravel Scout-biblioteket. I prosessen gikk vi gjennom de nødvendige installasjonene og et ekteeksempel for å demonstrere det.
Du er velkommen til å spørre om du har spørsmål eller tvil ved å bruke kommentaren feed nedenfor!