Laravel Scout-Korrekturen

Fehlerbehebung beim Laravel Scout-Import, wenn in der Suche keine Datensätze angezeigt werden

Laravel Scout macht die Volltextsuche einfach, aber manchmal läuft php artisan scout:import scheint zu funktionieren – es werden Stapel von Datensätzen importiert – aber wenn Sie Ihre Suchmaschine überprüfen, gibt es 0 Ergebnisse.

Ich bin selbst auf dieses Problem gestoßen und habe festgestellt, dass es auf ein fehlendes zurückkehren Erklärung im toSearchableArray() Methode. Es gibt jedoch mehrere mögliche Ursachen für dieses Problem. Lassen Sie uns sie durchgehen, damit Ihr Suchindex ordnungsgemäß funktioniert.

Heute hatte ich selbst den Fehler:

php artisan scout:import "App\Product" Importierte [App\Product]-Modelle bis zur ID: 944 Importierte [App\Product]-Modelle bis zur ID: 1444 Importierte [App\Product]-Modelle bis zur ID: 4788 Importierte [App\Product]-Modelle bis zur ID: 5288 Importierte [App\Product]-Modelle bis zur ID: 5788 Importierte [App\Product]-Modelle bis zur ID: 6288 Alle [App\Product]-Datensätze wurden importiert.

Es wurden jedoch 0 Datensätze gefunden innerhalb Typesense (in meinem Fall).

1. Fehlt zurückkehren In toSearchableArray()

Wenn Ihr toSearchableArray() Methode nichts zurückgibt, importiert Laravel Scout leere Datensätze, wodurch diese in Ihrer Suchmaschine unbrauchbar werden.

Falsch:

öffentliche Funktion toSearchableArray() { $array = [ 'id' => (Zeichenfolge)$this->id, 'merchant_id' => (Zeichenfolge)$this->merchant_id, 'shop_id' => $this->shop_id ?? 0, ]; }

Diese Methode definiert ein Array, gibt es aber nicht zurück.

Richtig:

öffentliche Funktion toSearchableArray() { return [ 'id' => (Zeichenfolge)$this->id, 'händler-id' => (Zeichenfolge)$this->händler-id, 'shop_id' => $this->shop_id ?? 0, ]; }

🤓😎 Immer mehr Menschen holen sich unsere Geek-, Datenschutz-, Entwickler- und Lifestyle-Tipps.

Möchten Sie die neuesten Blogbeiträge zu den Themen Technik, Datenschutz, Entwicklung und Lifestyle erhalten? Abonnieren Sie unseren Newsletter.

2. Modell nicht verwenden Durchsuchbar Eigenschaft

Damit Scout ein Modell erkennen kann, muss es die Durchsuchbar Eigenschaft.

Überprüfen Sie, ob Ihr Modell Folgendes enthält:

verwende Laravel\Scout\Searchable; Klasse Produkt erweitert Modell { verwende Searchable; }

Wenn das Durchsuchbar Merkmal fehlt, Scout verarbeitet das Modell nicht.

3. toSearchableArray() Gibt ein leeres Array zurück

Wenn toSearchableArray() gibt ein leeres Array zurück ([]), überspringt Scout die Indizierung dieses Datensatzes.

Beispiel einer schlechten Implementierung:

öffentliche Funktion toSearchableArray() { return []; }

Dies veranlasst Scout, das Modell als „nicht durchsuchbar“ und speichert sie nicht in Ihrer Suchmaschine.

Stellen Sie sicher toSearchableArray() enthält mindestens ein durchsuchbares Feld:

öffentliche Funktion toSearchableArray() { return [ 'id' => (Zeichenfolge) $this->id, 'name' => $this->name, ]; }

4. In der Datenbank fehlen Pflichtfelder

Wenn Ihre Datenbank Nullwerte für die Felder aufweist, die Sie indizieren möchten, kann dies zu Problemen führen.

Wenn Ihr toSearchableArray() Methode beruht auf Name, aber einige Datensätze haben NULL im Name werden sie möglicherweise nicht richtig indiziert.

Fix: Verwenden ?? um Standardeinstellungen bereitzustellen.

öffentliche Funktion toSearchableArray() { return [ 'id' => (Zeichenfolge) $this->id, 'name' => $this->name ?? 'Unbekannt', ]; }

5. Warteschlange verarbeitet keine Aufträge

Scout verwendet häufig Warteschlangen, um Importe asynchron abzuwickeln. Wenn Ihre Warteschlange nicht ausgeführt wird, scheint Scout möglicherweise Daten zu importieren, verarbeitet sie aber nicht wirklich.

Führen Sie den Warteschlangen-Worker aus, um sicherzustellen, dass Aufträge verarbeitet werden:

PHP Artisan-Warteschlange: Arbeit

Oder wenn Sie einen anderen Warteschlangentreiber verwenden, stellen Sie sicher, dass dieser ordnungsgemäß ausgeführt wird.

6. Typesense/Algolia/Meilisearch empfängt keine Daten

Auch wenn Laravel Scout einwandfrei funktioniert, liegt das Problem möglicherweise an der Suchmaschinenseite.

  • Typensinn: Überprüfen Sie, ob die Sammlung vorhanden ist, indem Sie Folgendes ausführen:
curl http://localhost:8108/collections

Wenn die Sammlung nicht vorhanden ist, ist sie möglicherweise nicht richtig eingerichtet.

  • Algolia: Gehen Sie zu Ihrem Algolia-Dashboard und prüfen Sie, ob Datensätze vorhanden sind.
  • Meilisearch: Versuchen Sie Folgendes auszuführen:
curl http://localhost:7700/indexes/products/documents

Wenn die Antwort leer ist, überprüfen Sie die Meilisearch-Protokolle.

7. durchsuchbar Umfang des Herausfilterns von Datensätzen

Wenn Sie Bedingte Indizierung mit durchsuchbar(), einige Datensätze sind möglicherweise nicht indiziert.

Zum Beispiel:

Produkt::wo('is_active', true)->durchsuchbar();

Dies indiziert nur aktiv Produkte. Wenn alle Ihre Produkte inaktiv sind (ist_aktiv = falsch), wird nichts indiziert.

Lösung: Stellen Sie sicher, dass Ihre Bedingungen Ihren tatsächlichen Daten entsprechen.

8. Der Scout-Indexname stimmt nicht mit Ihrer Suchmaschine überein

Scout ermöglicht Ihnen, den Indexnamen anzupassen. Wenn Ihre Suchmaschine einen anderen Indexnamen erwartet, sind Ihre Datensätze möglicherweise nicht sichtbar.

Überprüfen Sie Ihr Modell:

öffentliche Funktion searchableAs() { return 'products_index'; }

Überprüfen Sie anschließend in Ihrer Suchmaschine, ob dieser Index existiert.

9. Debuggen mit php artisan scout:flush und Wiedereinfuhr

Wenn Sie nicht sicher sind, was falsch ist, versuchen Sie, den Index zurückzusetzen:

php artisan scout:flush "App\Produkt" php artisan scout:import "App\Produkt"

Das Zollabfertigung und Reimport alle Datensätze.

Abschließende Gedanken

Wenn php artisan scout:import sagt, dass Datensätze importiert werden, aber in Ihrer Suchmaschine keine angezeigt werden, überprüfen Sie:

  • Tut toSearchableArray() Daten zurückgeben?
  • Verwendet das Modell Durchsuchbar?
  • Filtern Sie unbeabsichtigt Datensätze heraus?
  • Verarbeitet Ihre Warteschlange Importaufträge?
  • Empfängt Ihre Suchmaschine die Daten?

Wenn das Problem dadurch nicht behoben wird, führen Sie php artisan scout:flush gefolgt von php artisan scout:import.

Haben Sie noch weitere Scout-Probleme? Lassen Sie es mich in den Kommentaren wissen!

Zuletzt aktualisiert am 4. März 2025

Einen Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

de_DEDeutsch
Nach oben blättern