Skip to content

Instantly share code, notes, and snippets.

@cklein
Created March 8, 2011 14:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save cklein/860307 to your computer and use it in GitHub Desktop.
Save cklein/860307 to your computer and use it in GitHub Desktop.
Verschiedene Suchstrategien für D-Ablage
# Beispiel einer parallelen Suche mit asynctools:
def parallelsearch(tenant, term):
"""Suche, die eine parallele Abfrage des Datastores durchführt"""
from asynctools import AsyncMultiTask, QueryTask
results = []
runner = AsyncMultiTask()
for model in [Akte, Dokument]:
query = model.all().search(term).filter('tenant =', tenant)
runner.append(QueryTask(query, limit=1, client_state=model.__name__))
runner.run()
for task in runner:
results.extend([x.as_dict(self.abs_url) for x in task.get_result()])
return results
# Im Prinzip nicht das geforderte, da keine Präfixsuche durchgeführt wird.
# Dafür ein kleines Beispiel für google.appengine.ext.search.SearchableModel
# Liste von zu indexierenden Attributen
SEARCH_PROPERTIES = ['designator', 'name1', 'plz', 'email', 'ref', 'name2', 'ort']
class Akte(search.SearchableModel):
@classmethod
def SearchableProperties(cls):
"""Gib eine Liste von zu erstellenden Indexen an.
Die Listenelemente sind Listen von zu indexierenden Attributen."""
return [SEARCH_PROPERTIES]
def simplesearch(tenant, term):
"""Durchsuche Google Datastore nach Suchbegriff"""
results = []
for model in [Akte, Dokument]:
query = model.all().search(term, properties=SEARCH_PROPERTIES).filter('tenant = ', tenant)
results.extend(query.fetch(25))
return results
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment