Meilisearch-laravel-scout: Suche nach ID überspringen

Erstellt am 6. Apr. 2021  ·  5Kommentare  ·  Quelle: meilisearch/meilisearch-laravel-scout

Hallo,

Wenn beim Erstellen von toSearchableArray für ein bestimmtes Modell kein ID im endgültigen Array enthalten ist, kann ich die Daten nicht mit php artisan scout:import "App\Book" importieren. Aber wenn ich ID einbeziehe, wird es auch für die Suche nach ID verfügbar, was ein Verhalten ist, dem ich entgehen möchte. Was ist der richtige Weg, um die Suche nach ID zu deaktivieren?

Beispielcode:

    public function toSearchableArray()
    {
        $array = $this->toArray();

        foreach(array_keys($array) as $key) {
            //if I unset ID also, I won't be able to import table data
            if(in_array($key, ['id', 'title', 'name'])) continue;
            unset($array[$key]);
        }

        return $array;
    }

Hilfreichster Kommentar

Hallo @milosevicn ,

das ->toSearchableArray() definiert die gespeicherten Daten innerhalb von MeiliSearch für ein bestimmtes Dokument (Objekt). Das Weglassen von id führt zu nicht auffindbaren Elementen in der Suche, da id standardmäßig der Primärschlüssel ist, der zum Identifizieren eines Dokuments verwendet wird.

Um zu verhindern, dass MeiliSearch alle Felder durchsucht, sollten Sie die Funktionalität dieses Pakets erweitern und searchAttributes in MeiliSearch festlegen. Eine Anleitung dazu finden Sie hier .

Alle 5 Kommentare

Hallo @milosevicn ,

das ->toSearchableArray() definiert die gespeicherten Daten innerhalb von MeiliSearch für ein bestimmtes Dokument (Objekt). Das Weglassen von id führt zu nicht auffindbaren Elementen in der Suche, da id standardmäßig der Primärschlüssel ist, der zum Identifizieren eines Dokuments verwendet wird.

Um zu verhindern, dass MeiliSearch alle Felder durchsucht, sollten Sie die Funktionalität dieses Pakets erweitern und searchAttributes in MeiliSearch festlegen. Eine Anleitung dazu finden Sie hier .

@mmachatschek Tut
Wenn ich Dokumente mit dem Befehl php artisan scout:import hinzufüge, funktioniert alles wie es soll, aber wenn ich dasselbe mit der /indexes/:index_uid/documents Route ( ->addDocuments() ) mache, wird toSearchableArray() nicht respektiert
Ich könnte dies wahrscheinlich überwinden, indem ich während der Abfrage bestimmte Spalten auswähle, aber gibt es eine Möglichkeit, die Funktion addDocuments() selbst auf toSearchableArray() ?

Hallo @milosevicn ,

Dieses Paket ist im Grunde ein Wrapper für die MeiliSearch PHP-Bibliothek und erweitert Laravel Scout.

Beim "manuellen" Hinzufügen von Dokumenten geht die ganze Magie, die Scout bietet, zB das Hinzufügen neuer Objekte zum Index oder das Aktualisieren vorhandener mit bestimmten Feldern usw., verloren, weil Sie diese Schritte überspringen.

Gibt es eine bestimmte Absicht, wenn Sie Dokumente manuell hinzufügen?

Danke für die Antwort @mmachatschek

Ich habe eine Multi-Tenancy-App - zwei separate Apps (Vermieter und Mieter). Aus diesem Grund kann ich die vordefinierte Laravel Scout-Funktion nicht verwenden, um Dokumente automatisch zu aktualisieren, sobald etwas zur Datenbank hinzugefügt wird. Aus diesem Grund verwende ich einen Webhook, um meine Mieter-App zu informieren, wenn etwas in der Datenbank tatsächlich beim Vermieter passiert ist (bei erstellt/aktualisiert/gelöscht). Ich möchte diese Dokumente hinzufügen, sobald ich einen Webhook auf dem Mandanten erwische

@milosevicn Ich denke, du könntest einfach ein $model->touch() . Dadurch wird die Spalte updated_at des Modells aktualisiert und das Ereignis updated wird in der Mandanten-App ausgelöst. Der Scout-Ereignis-Listener löst dann eine Aktualisierung des Index aus. Würde das bei dir klappen?

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen