2010-12-22 12 views
2

Gibt es eine Möglichkeit, Abfragen ähnlich wie die like, contains, startswith Betreiber mit App-Engine BigTable-Datenbank generieren?web2py wie Äquivalente mit Google App Engine

So, dass ich etwas Ähnliches tun könnte:

db(db.some_table.like('someting')).select() 

mit App Engine in web2py.

+0

Beginnt mit ist unter http://stackoverflow.com/questions/1554600/implementing-starts-with-and-ends-with-queries-with-google-app-engine; die anderen 2 sind nicht möglich. – geoffspear

Antwort

7

App-Engine unterstützt keine Volltextsuche, also kurze Antwort ist nein.

Mit web2py können Sie ein berechnetes Feld mit einer Liste von zu suchenden Stichwörtern erstellen.

Auf GAE ist das Schlüsselwortfeld eine StringListProperty().

dann statt in Titel zu suchen, suchen Sie in Stichworten:

rows = db(db.data.keywords.contains(my_keyword.lower())).select() 

Dies funktioniert auf GAE und es ist sehr effizient. Das Problem besteht nun darin, dass Sie aufgrund des GAE- "explodierenden" Indexproblems nicht dazu verwendet werden, es in komplexen Abfragen zu kombinieren. Beispiel: Sie haben N Schlüsselwörter und möchten nach zwei Schlüsselwörtern suchen:

rows = db(db.data.keywords.contains(my_keyword1.lower())& 
      db.data.keywords.contains(my_keyword2.lower())).select() 

Ihre Indexgröße wird N^2. So haben Sie komplexere Abfragen lokal auszuführen:

query2=lambda r: my_keyword1.lower() in r.keywords 
rows = db(db.data.keywords.contains(my_keyword1.lower())).select().find(query2) 

All dies auch auf GAE arbeiten und nicht-on-GAE. Es ist tragbar.

+0

danke! gute Antwort – crodjer