Laravel Scout-oplossingen

Problemen met Laravel Scout-import oplossen wanneer er geen records in de zoekopdracht verschijnen

Laravel Scout maakt het zoeken naar volledige tekst eenvoudig, maar soms is het lastig om php ambachtelijke scout:import lijkt te werken - het toont batches van records die worden geïmporteerd - maar wanneer u uw zoekmachine controleert, zijn er 0 resultaten.

Ik heb dit probleem zelf ook gehad en ontdekte dat het kwam door een ontbrekende opbrengst verklaring in de naarZoekbareArray() methode. Er zijn echter meerdere mogelijke oorzaken voor dit probleem. Laten we ze doornemen zodat u uw zoekindex goed kunt laten werken.

Vandaag had ik zelf de fout:

php artisan scout:import "App\Product" Geïmporteerde [App\Product] modellen tot ID: 944 Geïmporteerde [App\Product] modellen tot ID: 1444 Geïmporteerde [App\Product] modellen tot ID: 4788 Geïmporteerde [App\Product] modellen tot ID: 5288 Geïmporteerde [App\Product] modellen tot ID: 5788 Geïmporteerde [App\Product] modellen tot ID: 6288 Alle [App\Product] records zijn geïmporteerd.

Er zijn nog 0 records gevonden binnen Typesense (in mijn geval).

1. Vermist opbrengst in naarZoekbareArray()

Als je naarZoekbareArray() Als de methode niets retourneert, importeert Laravel Scout lege records, waardoor ze nutteloos zijn in uw zoekmachine.

Onjuist:

openbare functie toSearchableArray() { $array = [ 'id' => (string)$this->id, 'merchant_id' => (string)$this->merchant_id, 'shop_id' => $this->shop_id ?? 0, ]; }

Deze methode definieert een array, maar retourneert deze niet.

Juist:

openbare functie toSearchableArray() { return [ 'id' => (string)$this->id, 'merchant_id' => (string)$this->merchant_id, 'shop_id' => $this->shop_id ?? 0, ]; }

2. Model niet in gebruik Doorzoekbaar Karaktereigenschap

Om een model te herkennen, moet Scout de volgende kenmerken gebruiken: Doorzoekbaar karaktereigenschap.

Controleer of uw model het volgende bevat:

gebruik Laravel\Scout\Searchable; klasse Product breidt Model uit { gebruik Searchable; }

Als de Doorzoekbaar eigenschap ontbreekt, Scout zal het model niet verwerken.

3. naarZoekbareArray() Retourneert een lege array

Als naarZoekbareArray() retourneert een lege array ([]), zal Scout het indexeren van dat record overslaan.

Voorbeeld van een slechte implementatie:

openbare functie toSearchableArray() { return []; }

Dit zorgt ervoor dat Scout het model behandelt als “niet doorzoekbaar” en worden niet in uw zoekmachine opgeslagen.

Zorg ervoor naarZoekbareArray() bevat ten minste één doorzoekbaar veld:

openbare functie toSearchableArray() { return [ 'id' => (string) $this->id, 'name' => $this->name, ]; }

4. Database-records missen vereiste velden

Als uw database null-waarden bevat voor de velden die u probeert te indexeren, kan dit problemen veroorzaken.

Als uw bijvoorbeeld naarZoekbareArray() methode is gebaseerd op naam, maar sommige gegevens hebben NIETIG in de naam kolom, worden ze mogelijk niet correct geïndexeerd.

Repareren: Gebruik ?? om standaardinstellingen te verstrekken.

openbare functie toSearchableArray() { return [ 'id' => (string) $this->id, 'name' => $this->name ?? 'Onbekend', ]; }

5. Wachtrij verwerkt geen taken

Scout gebruikt vaak wachtrijen om imports asynchroon te verwerken. Als uw wachtrij niet actief is, lijkt het erop dat Scout gegevens importeert, maar deze niet daadwerkelijk verwerkt.

Voer de wachtrijwerker uit om ervoor te zorgen dat taken worden verwerkt:

php artisan wachtrij:werk

Of als u een andere wachtrijdriver gebruikt, controleer dan of deze correct werkt.

6. Typesense/Algolia/Meilisearch ontvangt geen gegevens

Zelfs als Laravel Scout prima werkt, kan het probleem aan de zoekmachine kant.

  • Typografie: Controleer of de collectie bestaat door het volgende uit te voeren:
krul http://localhost:8108/collections

Als de collectie er niet is, is deze mogelijk niet correct ingesteld.

  • Algolia: Ga naar uw Algolia-dashboard en controleer of er records bestaan.
  • Meilisearch: Probeer het volgende uit te voeren:
krul http://localhost:7700/indexes/products/documents

Als het antwoord leeg is, controleer dan de Meilisearch-logboeken.

7. doorzoekbaar Bereik Filteren van Records

Als u gebruik maakt van voorwaardelijke indexering met doorzoekbaar(), zijn sommige records mogelijk niet geïndexeerd.

Bijvoorbeeld:

Product::where('is_actief', true)->doorzoekbaar();

Dit indexeert alleen actief producten. Als al uw producten inactief zijn (is_actief = false), wordt er niets geïndexeerd.

Oplossing: Zorg ervoor dat uw voorwaarden overeenkomen met uw werkelijke gegevens.

8. Scout Index-naam komt niet overeen met uw zoekmachine

Met Scout kunt u de indexnaam aanpassen. Als uw zoekmachine een andere indexnaam verwacht, zijn uw records mogelijk niet zichtbaar.

Controleer uw model:

openbare functie doorzoekbaarAs() { return 'products_index'; }

Controleer vervolgens in uw zoekmachine of deze index bestaat.

9. Debuggen met php ambachtelijke scout:flush en herimporteren

Als u niet zeker weet wat er mis is, probeer dan de index opnieuw in te stellen:

php artisan scout:flush "App\Product" php artisan scout:importeer "App\Product"

Dit opruimen en herimporteren alle gegevens.

Laatste gedachten

Als php ambachtelijke scout:import Er staat dat er records worden geïmporteerd, maar er verschijnen er geen in uw zoekmachine. Controleer:

  • Doet naarZoekbareArray() gegevens retourneren?
  • Maakt het model gebruik van Doorzoekbaar?
  • Filtert u onbedoeld records weg?
  • Is uw wachtrij bezig met het verwerken van importtaken?
  • Ontvangt uw zoekmachine de gegevens?

Als geen van deze oplossingen het probleem oplost, probeer dan het volgende: php ambachtelijke scout:flush gevolgd door php ambachtelijke scout:import.

Heb je nog andere Scout-problemen? Laat het me weten in de reacties!

Laat een reactie achter

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *

nl_NLNederlands
Scroll naar boven