Neues Thema starten

SearchDatastore: Liste von Identifiern?

Hallo Synesty Team,


ich habe recht häufig das Problem, dass ich bestimmte Datensätze aus einem Datastore benötige und hierzu auch Listen von IDs (Identifiern hätte). Leider kann der SearchDatastore Step nur jeweils einen Wert bei den Identifiern haben. Gibt es eine Möglichkeit gezielt nach mehreren Datensätzen zu suchen? Ich habe mir bisher geholfen, den Output des SearchDatastore anschließend zu filtern, aber das ist recht viel Aufwand und speziell in der Vorschau liefert dies meistens nicht das notwendige Ergebnis. das wiederum macht das entwickeln mit Synesty unnötig schwer und wir müssen dies teuer mit Flow Runs bezahlen, wenn wir eine Vorschau mit korrekten Daten haben wollen.Zudem wäre es beim Search Datastore direkt nach bestimmten Spalten zu filtern und eben nicht nur den Identifiern.


Wenn der Datastore nicht utopisch groß ist, dann könnte folgender Freemarker Filter helfen:


"1,2,3"?split(",")?seq_contains(identifier!)


1,2,3 wären die gesuchten Identifier.


Ergebnis:




Diese Suche ist technisch das gleiche wie ein SearchDatastore + Filter Step.


Man kann das auch mit anderen Spaltennamen machen. Auch Kombinationen sind möglich. 

Genau diese Lösung nutze ich bereits, aber unsere Datastores sind teilweise mehrere 10k Datensätze groß.

D.h. was genau ist jetzt das Problem? 

Reichen die 200 Datensätze im Ergebnis nicht?

Dauert es zu lange?


Das ging leider noch nicht so klar aus Ihrer Nachricht hervor? Dann können wir mal überlegen, ob wir eine Lösung finden. 


Ok, sorry, wir hatten Sie falsch verstanden und jetzt gesehen, dass sie sich explizit auf den SearchDatastore-Step beziehen. Wir hatten es gedacht es geht um die Suche im Backend. 


Wir diskutieren mal Ansätze. Vorherige Nachricht bitte ignorieren. 

Nach erster interner Rücksprache geht es in Richtung eines neuen Steps für diesen Anwendungsfall. 


Könnten Sie uns noch etwas Input für die Planung geben? 


1. In welcher Form liegen die Identifier vor (

a) z.B. als String, komma-getrennt, oder 

b) als Spreadsheet in einer bestimmten Spalte)


2. Brauchen Sie diese Funktionalität eher nur beim Debugging / Entwickeln, oder ist das auch bei echten Flow-Ausführungen gebraucht? 


3. Können Sie uns ein Beispiel-Szenario beschreiben, bei dem Sie so etwas machen?


Das würde uns bei der Planung helfen. 


Vielen Dank



Identifier liegen z.B. als Spreadsheet vor. Den oben beschriebenen Workaround nutze ich derzeit, der Filter ist aber sehr langsam bei größeren Datastores.Hier wäre es schon von Vorteil, wenn man explizit nach einer Liste von IDs filtern könnte. Hier mal wie ich es aktuell mache:

 

<#assign orders = []><#list spreadsheet@SpreadsheetMapper_36.getRows() as row><#if row.get("id")?trim != ""><#assign orders = orders + [row.get("id")]></#if></#list>datastorename == "shopifyOrderItems" && "${orders?join(',')}"?split(",")?seq_contains(identifier2)

 Das kann dann aber auch schon mal eine Liste von 1000 IDs sein, und man sucht in einem Datastore mit 21.000 Datensätzen.

Danke für das Feedback. 

Ja dieser check ist in der Tat worst-case, da er bei jeder Iteration neu evaluiert wird. 


Ein Boost wäre wie folgt möglich: 


1. Schreiben Sie sich die IDs vorher in einen TextHTMLWriter (dadurch wird der die Schleife nur ein einziges mal durchlaufen, um den String aufzubauen):


<#list spreadsheet@SpreadsheetMapper_36.getRows() as row><#if row.get("id")?trim != "">${row.get("id")}<#sep>,</#sep></#list>



2. Im Filter machen sie dann stattdessen:


datastorename == "shopifyOrderItems" && outputDesTextHTMLWriters?split(",")?seq_contains(identifier2)


(Den delimiter ggf. anpassen, falls der Identifier auch Kommas enthalten kann. )


Wir haben in der Zwischenzeit einen neuen Step für den nächsten Sprint geplant, der Datensätze aus dem Datastore anhand eines identifiers abrufen kann. 



Es gibt jetzt einen neuen Step SearchInDatastoreByIdentifiers.

Dieser Step sucht Datensätze in einem Datastore mit einem SPREADSHEET, das einen identifier (1-3) enthält.  
Das Ergebnis ist ein Spreadsheet mit den gefunden Datensätzen. 


Zu den Besonderheiten gehört:

  • leere identifier in der Quelle werden ignoriert 
  • doppelte identifier in der Quelle werden nur einmal gesucht
  • gibt es bei identifier2 und identifier3 (diese beiden identifier sind nicht unique) mehrere Treffer im Datastore , dann werden alle Treffer ausgegeben.
    Das ist z.B. ein Unterschied zum Querverweis der nur den "ersten" Treffer finden würde.


Wir freuen uns über Feedback. 






1 Person gefällt dies

Wow, das klingt echt vielversprechend! Ich werde mir das ASAP anschauen :-)

Anmelden um einen Kommentar zu veröffentlichen