elasticsearch: neue Artikel werden in listing nicht angezeigt

Hallo,

wir sind noch vor dem GoLive mit unserem neuen SW5-Shop.

Da wir viele Produkte (>200.000) in 5 Sprachen haben, nutzen wir elasticsearch im Frontend und Backend. Funktioniert soweit auch gut.

Wir importieren neue Artikel stündlich über die API. Funktioniert auch gut.

Aber jetzt das Problem:

Wenn wir neue Artikel importieren, findet man die zwar im Backend über elasticsearch, man findet sie über die Suche im Frontend, aber man findet sie nicht im Listing in der Kategorie. Wenn ich also eine Kategorie aufrufe, die eigentlich 3 neu importierte Artikel enthalten soll, werden hier gar keine Artikel angezeigt. Suche ich eine der neuen Artikelnummern über die Frontend- oder auch Backend-Suche finde ich die Artikel und kann sie auch aufrufen (im Frontend & Backend). Also scheinen die Artikel ja im elasticsearch bekannt zu sein, sonst würden sie hier ja auch nicht angezeigt.

Erst wenn ich 

php bin/console sw:es:backend:index:populate

auf der Kommandozeile ausführe, werden die Artikel auch in der Kategorie angezeigt.

Aber diesen Befehl wollte ich eigentlich nur nachts über cronjob aufrufen, weil er länger dauert (30 min oder so). Den cronjob stündlich aufzurufen, belastet aus meiner Sicht das System unnötig.

Andererseits werden neue Artikel so dann erst am nächsten Tag im Shop vollständig gelistet.

Gibt es hierfür eine Lösung? Wie habt ihr das gelöst? Kann man den populate-Befehl irgendwie vielleicht nur für neue Artikel aufrufen?

Bin für jeden Tipp dankbar.

Viele Grüße

Du könntest es mal mit

php bin/console sw:es:backend:sync

probieren. Ansonsten, auch den populate-Cronjob öfter laufen zu lassen dürfte die Maschine nicht stallen. Du solltest nur dran denken regelmäßig dann auch den cleanup

php sw:es:backend:index:cleanup

laufen zu lassen .

Viel Erfolg
Geert

1 „Gefällt mir“

Hi Geert,

Danke für Dein Feedback.

Ich hab es bisher mit 

sw:es:backlog:sync

und

sw:es:index:cleanup

probiert. Aber das hat nix gebracht. Die Backend-Befehle habe ich noch nicht ausprobiert. Werde ich gleich mal machen. Danke.

Wie arbeitet die Schnittstelle denn? Generell wird das Backlog ja nur über die API geschrieben, dann sollte backlog:sync auch das passende Ergebnis bringen.

1 „Gefällt mir“

@Moritz Naczenski schrieb:

Wie arbeitet die Schnittstelle denn? Generell wird das Backlog ja nur über die API geschrieben, dann sollte backlog:sync auch das passende Ergebnis bringen.

Hallo Moritz,

vielen Dank für die Info.

Ich hab jetzt zwischenzeitlich nochmal die backlog-Tabelle s_es_backlog geleert (da waren 30 Mio. Einträge drin) und nochmal gecleaned und gesynct. Und jetzt auf einmal funktioniert es mit backlog:sync. Vielleicht weil ich vorher nie gecleaned habe, dass dann zuviele Einträge für den sync da waren?

Auf jeden Fall funktioniert es jetzt mit sw:es:backlog:sync :slight_smile:

In welchem Intervall kann man den backlog:sync laufen lassen, ohne dass es das System zu sehr belastet? Wären alle 15 Min zuviel?

Vielen Dank für die Hilfe

Ich würde es etwas davon abhängig machen, wie oft du Daten übeträgst. Ansonsten halt die Tabelle im Auge behalten und Zeit runtersetzen, wenn die irgendwie zu voll wird.