Suche Idee: suche mit allen Einträge einer Liste in Artikeln aus anderer Liste, wenn Treffer: Querverweis mit Name/ID

Hallo,

ich bin mir gerade nicht sicher ob sich das sinnvoll automatisieren lässt, oder es simpler ist jemanden abzustellen das von Hand zu machen...

Problem: die Kategorisierung unserer Artikel lässt zu wünschen übrig. Sind meist in einer korrekten Mutterkategorie, aber die detaillierteren Childs fehlen dann oft.

Beispiel: Eine San Marzano Tomate ist als "Gemüsesamen" und "Gemüsesamen > Tomatensamen" kategorisiert. Aber "Gemüsesamen > Tomatensamen > San-Marzano Tomatensamen" fehlt. Wo aber die Google-Treffer hingehen.

Ich würde jetzt gern mit einer Suche (?contains) über alle Kategorien die wir haben (in einem DS) iterieren, und diese als Suchbegriff verwenden, mit allen Artikelnamen und -beschreibungen aus einem anderen DS. Wenn ein Treffer erfolgt, soll wiederum mit dem Suchbegriff ein Querverweis auf die Kategorien gemacht werden, um so deren ID zu ermitteln. Und diese Kategorie-ID füge ich dann am Artikel zu.

Das sind letztlich nur ein paar verschachtelte Schleifen, aber mir ist unklar wie ich das in Synesty umsetzen kann. Hat jemand eine Idee und kann mir auf die Sprünge helfen?


Wie gesagt: wenn das nicht ohne weiteres abbildbar ist, lass ichs von Hand machen. Ich prüfe grade nur die Optionen...

Danke, Daniel


Hallo Daniel,


wenn ich dein Problem korrekt verstanden habe, dann sollte es eventuell möglich sein, deinen Kategorie Baum in ein KeyValue Spreadsheet reinzupacken.

Über das Script

<#list meta.map@KeyValueSpreadsheet_3.getRows() as row> 
  row ${row.rowNumber!} : key: ${row.get("key")!}: 
  row ${row.rowNumber!} : value: ${row.get("value")!}: 
</#list>

kannst du über alle Einträge im KeyValue iterieren.

Dort könntest du dann also abfragen:

<#if row.get("key")?lower_case?contains("sanmarzano")>
${row.get("value")}
</#if>

Es ist empfehlenswert für den Abgleich den Kategoriebaum und die Artikelnamen zu "normalisieren". Also hier in etwa, alle Leerzeichen, Bindestriche und weitere Trennzeichen entfernen und alles klein zu schreiben.


Viele Grüße

Stefan

Oh, das hat ja lange gedauert bis ich tatsächlich dazu gekommen bin...

Lag auch daran, dass wir jetzt keine reine Kategorieliste mehr verarbeiten, sondern eine Zuordnung Keyword zu Kategorie-ID. So lassen sich auch Synonyme abdecken, und ein "Paradeiser" wird als Tomate erkannt, und eine "Eierfrucht" als Aubergine.

Das hat funktioniert wie von Stefan vorgeschlagen, vielen Dank dafür!

Ich lass mal meinen Code da wie es letztlich gelöst wurde:

Meine Zuordnung "Suchwort:KategorieID" liegt wie vorgeschlagen im KeyValue-Spreadsheet, dann zieh ich mir meine Artikeldaten mit zu durchsuchenden Feldern aus einem Datastore, und dann

<#assign add_cats>
<#list meta.map@KeyValueSpreadsheet_9.getRows() as row>
<#if ItemTextsName1?lower_case?contains(row.get("key")?lower_case!)>${row.get("value")?trim};</#if>
</#list>
</#assign>
${add_cats?trim?remove_ending(";")}

Das mach ich insgesamt drei mal für drei zu durchsuchende Felder, dann verkette ich diese drei, und dann entferne ich alle Duplikate:

<#assign seenCat = []>
<#list allSuggestions?split(";") as suggestion>
<#assign thisCat = suggestion>
<#if !seenCat?seq_contains(thisCat)><#assign seenCat = seenCat + [thisCat]>${thisCat?trim};</#if></#list>

Letzter Semikolon raus im selben Mapper, aber im Script-Feld:

${value?remove_ending(";")}

Jetzt noch aus dem String alle Kategorien raus, die der Artikel schon hat

<#assign add_cats>
<#list cleanSuggestions?split(";") as cat>
<#if !AllCategoryIDs?split(";")?seq_contains(cat)>${cat};</#if></#list></#assign>
${add_cats?remove_ending(";")}

Zackbumm: Kategorisierung per Stichwort im Titel. Hätte ich schon lang mal bauen sollen.