13 Stimmen

wie man zwei Ungleichheitsfilter für Abfragen in App Engine effektiv einsetzt

Ich bin mir bewusst, dass die App-Engine die Einschränkung "Ungleichheitsfilter sind nur für eine Eigenschaft zulässig" hat, wie hier beschrieben: http://code.google.com/appengine/docs/python/datastore/queriesandindexes.html#Introducing_Indexes

Gibt es jedoch eine Möglichkeit, im Wesentlichen zwei Filter zu betreiben, oder ist dies einfach nicht möglich? Wenn ich zum Beispiel eine Entitätsart hätte, die einfach eine X- und Y-Koordinate hat, und ich wollte alle Entitäten, die innerhalb eines bestimmten Bereichs von X1 bis X2 und Y1 bis Y2 liegen, gibt es eine Möglichkeit, alle Entitäten von X1 bis X2, sortiert nach ihren Y-Werten, abzufragen und dann einfach die relevanten Entitäten zwischen meinem gewünschten Bereich für die Y-Werte auszuwählen?

Wenn ja, hat jemand einen Beispielcode zur Demonstration?

6voto

Saxon Druce Punkte 17168

Wenn es zu Ihren Daten passt, können Sie Ihre X- und Y-Werte in Bins diskretisieren, einen Hash der beiden Werte erzeugen und diesen im Modell speichern. Dann können Sie nach den Hash(s) suchen, die sich mit dem Bereich überschneiden, in dem Sie suchen möchten. Anschließend filtern Sie manuell die Ergebnisse heraus, die außerhalb Ihrer Region liegen.

Dies ist im Wesentlichen das, was Geomodell für Breitengrad/Längengrad.

3voto

Drew Sears Punkte 12732

Laut Alfred Fullers kürzlich erschienenem Google I/O-Gespräch Sie arbeiten an der Unterstützung für mehrere Ungleichheitsfilter für numerische Eigenschaften.

1voto

NickZoic Punkte 7157

Je nachdem, was Sie vorhaben, könnten Sie Folgendes finden MultiInequalityMixin interessant. Es macht ziemlich genau das, was du beschreibst, indem es die erste Ungleichung an die Google-Datenbank weitergibt und nachfolgende Ungleichungen als Filter durchführt. Disclaimer: es ist eine ziemlich skizzenhafte Umsetzung einer Idee, die ich vor über einem Jahr hatte und nicht wirklich jeder fertig ...

Wenn Sie eine effiziente Indizierung auf zwei Achsen benötigen, dann ist, wie Saxon Druce sagt, eine Art Geohash-Algorithmus usw. gefragt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X