Mit Elasticsearch keine individuelle Sortierung möglich?

Hallo zusammen,

wir portieren derzeit unseren Shop (motorrad-ersatzteile24.de) auf SW 5 und sind auf ein Problem gestoßen: Die individuelle Sortierung (siehe http://community.shopware.com/Individuelle-Filter--Sortierungen_detail_2032.html, in unserem Falle nach einem Artikelfreitextfeld), funktioniert in Verbindung mit Elasticsearch nicht korrekt. Artikel werden nicht wie gewünscht sortiert, ein Muster ist für uns auf die Schnelle nicht zu erkennen… stellen wir elasticsearch aus, wird die Reihenfolge problemslos eingehalten.

Wir verkaufen Motorradteile und sind zwingend auf Elasticsearch angewiesen, die Zuordnung von Artikeln zu Motorrädern bläht nämlich die Datenbank extrem auf. Auch mit dediziertem Web- und Datenbankserver ist unser Shop ohne ES einfach zu langsam. 

 

Frage ich den Inhalt des product-Indexes für einen einzelnen Artikel ab, erhalte ich folgendes Ergebnis:
curl -XGET ‚localhost:9200/sw_shop1_20180112115518/product/104020153H/_source?pretty‘
{
  „number“ : „104020153H“,
  „mainVariantId“ : 8716,
  „id“ : 8716,
  „variantId“ : 8716
}

Das sieht für mich so aus, als würde Shopware tatsächlich nur die Artikelnummer- und ID indexieren, ist das so richtig? 

Würde die individuelle Sortierung greifen, wenn ich per Plugin die Freitextfelder mit an ES übergebe? Dann würden wir uns an solch ein Plugin setzen… aber wenn die Sortierung von Anfang an nicht für ES ausgelegt ist, würden wir uns die Zeit gerne sparen :wink:

Installiere dir mal das ES Head Plugin.

Da kannst du die Daten besser auslesen.

https://mobz.github.io/elasticsearch-head/

 

 

Habe ich gemacht, danke für den Tipp! Der Inhalt scheint aber nach wie vor identisch zu sein… wenn ich mich durch den product-Index browse, finde ich nichts in den Freitextfeldern. Hier ein neues Beispiel:

{
    “_index”: “sw_shop1_20180116141019”,
    “_type”: “product”,
    “_id”: “SW10001”,
    “_version”: 1,
    “_score”: 1,
    “_source”: {
        “number”: “SW10001”,
        “mainVariantId”: 1,
        “id”: 1,
        “variantId”: 1
    }
}

 

Für diesen Test habe ich extra ein komplett frisches Shopware 5.3.6 aufgesetzt, um auszuschließen, dass Änderungen von uns etwas beeinflussen. Jemand eine Idee?

Was passiert, wenn du in ein Attributfeld in einem Artikel einen individuellen Wert speicherst. Und auf ES Seite sucht du dann über das Attributfeld. Wird der Artikel dann gefunden?

Evtl sind die Werte vorhanden, aber nicht zum Anzeigen gedacht/freigegeben.

Sortierung nach Preis funktioniert ja auch. Der Preis wird im Element direkt aber auch nicht angezeigt.

Ich denke du musst dich durch das ES SearchBundle debuggen.

 

1 „Gefällt mir“

Hm, irgendwie habe ich damit Probleme. Wenn ich manuell einen Wert in das entsprechende Freitextfeld (attr4) eintrage, kann ich über den elasticsearch-Browser danach filtern und bekomme auch den richtigen Artikel angezeigt - allerdings verschwindet der Artikel dann aus dem Listing im Shop, egal, welche Sortierung ich verwende.

Ich habe folgenden Befehl zum Updaten benutzt: curl -XPOST ‘localhost:9200/sw_shop1_20180117110838/product/SW10003/_update?pretty’ -H ‘Content-Type: application/json’ -d’ {“doc”: { “attributes.core.attr4”: “Testinhalt” }} ’

Die restlichen Werte verändern sich dabei nicht und auch im Backend sind die Artikel unverändert aufrufbar. Hast du einen “erprobten” Befehl, um bestehende Felder zu verändern? Auf jeden Fall schon mal Danke für die Denkanstöße!

Wir ändern die Artikel über die API und Backend von Shopware. Über das Backlog Sync wird dies ja dann mit ES synchronisiert und die Daten werden aktualisiert.
Einen direkten Befehl kenne ich daher nicht.

Wir setzen allerdings keine eigene Sortierung ein. Daher kann ich dazu nicht wirklich viel sagen.

 

Nach ausführlichem Testen auf einem frischen System würde ich sagen, dass es sich hier um einen Bug seitens Shopware bzw. der ES Implementierung handelt. Die Freitextfelder der Artikel werden an den Elasticsearch Index out of the box problemlos übergeben und auch von der individuellen Sortierung verwendet. Die Probleme mit der Sortierung tauchen dann auf, sobald das entsprechende Freitextfeld Text mit Leerzeichen beinhaltet.

Ich habe im System ein neues Artikelfreitextfeld angelegt, die individuelle Sortierung über dieses Feld konfiguriert und dann mehrere Beispielartikel erzeugt. Die Felder habe ich dann mit Werten wie “A”, “A A”, “B”, “A B”, “B A”, etc befüllt. Die Sortierung ist im Normalbetrieb korrekt, aber sobald elasticsearch per config.php aktiviert wird, ändert sie sich. Ich habe zu dem Thema ein Ticket im Issuetracker angelegt, da sind auch Screenshots zu finden: https://issues.shopware.com/issues/SW-20953

Das Problem tritt zwar nur unter ziemlich speziellen Bedingungen auf, aber in unserem Falle hat es uns doch ganz schön Zeit und Nerven gekostet… wir wollen unsere Artikel auf den Kategorieseiten nach Warengruppe sortieren, um unseren Kunden das Listing so übersichtlich wie möglich zu gestalten. Statt auf einen Fix zu warten haben wir daher erstmal einen Workaround geschaffen, indem wir alle verfügbaren Warengruppen intern vorsortieren und Nummern vergeben, die mit der richtigen Sortierreihenfolge einhergehen. Wir würden uns freuen, wenn sich Shopware der Sache irgendwann annimmt.