2017-04-16 5 views
0

Ich versuche, ein Beispiel aus der Esper-Dokumentation für die where Enumerationsmethode zu erweitern und Probleme zu haben. Hier ist das Beispiel in Frage:Versuch, einen Esper Lambda-Ausdruck zu verwenden

Was ich tun möchte, scheint ziemlich einfach. Statt items auszuwählen, die diesen Ausdruck entsprechen:

  • ich LocationReport s auswählen möchten, dass mindestens ein item enthalten, die den Ausdruck übereinstimmt.

  • Tun Sie es über ein time_batch-Fenster (betonter Text nicht-Batch-Zeitfenster ist eine Möglichkeit ebenso).

Also jedes n Anzahl von Sekunden würde ich eine Sammlung von LocationReport s erhalten, in dem jeder Bericht mindestens eine Nullposition in seine Einzelteile Liste enthält.

Für Referenz, hier ist die Struktur der Java-Objekte in dem Esper Beispiel verwendet:

public class LocationReport {Listenelemente; ...

öffentliche Klasse Item {String assetId; // Passagier oder Gepäckstück ID Ort Ort; // (x, y) Ort boolean Gepäck; // true, wenn es sich bei diesem Artikel um ein Gepäckstück handelt String assetIdPassenger; // if der Artikel ist Gepäck, enthält passagierzugehöriger ...

öffentliche Klasse Standort {int x; int y; ...

Background Detail: Angenommen LocationReport ist das eigentliche Objekt, das ich interessiert bin ...
EPL Verwendung wie in dem obigen Beispiel der where Logik funktioniert, aber das Problem ist, dass bei der Rückkehr nur das items Mitglied, ich sehe nicht die LocationReport Klasse, die es kam, die neben items andere Eigenschaften enthält, die meine UpdateListener braucht.

Auch wahrscheinlich nicht relevant, aber in meinem Fall erhalte ich eine hohe Rate von Nachrichten, wo viele LocationReports Duplikate sind (oder nah genug, um als Duplikate betrachtet zu werden), und meine WHERE-Klausel muss diese Bestimmung treffen und nur "neue" Nachrichten weiterleiten.

Danke!

+0

Sie sollten testbaren Code hinzufügen (der das Problem reproduziert). Erwähnen Sie das erwartete Ergebnis gegen das aktuelle Ergebnis, dann kann Ihnen jemand helfen, es zu beheben. –

Antwort

1

Sie könnten das "*" zur Auswahl hinzufügen und das gibt Ihnen die Ereignisobjekte neben. select *, items.where(...) from LocationReport Sie könnten "Ausgabe alle N Sekunden" zur Ausgabe hinzufügen. Fügen Sie "#time (...)" für das Zeitfenster hinzu.

Verwandte Themen