2012-05-15 5 views
6

Dort gab es Hinweise in der GoogleIO talk on Search API, dass wir Suchen basierend auf Geolocation tun können.Wie lat-lon geolocation Punkt in einem Dokument für GAE-Suche speichern?

Ich kann kein appropriate field finden, um Ortsinfo zu speichern.

Wie kann ich Geolokationsinformationen in der document speichern, damit ich Abfragen basierend auf der Entfernung von einem bestimmten GPS-Standort ausgeben kann?

+0

ich glaube nicht, es ag ood antwort darauf. Im Moment befindet sich die Such-API in einem experimentellen Zustand. Ich habe die Dokumentation und den Beispielcode (http://goo.gl/Yb7n1) durchsucht. Es gibt nicht viele Informationen, die entweder diese Funktionalität adressieren, oder Sie können einen guten Mechanismus zur Lösung dieses Problems konstruieren. Ich empfehle, die Seite zur Fehlerverfolgung des Such-APIs (http://goo.gl/LczvP) aufzurufen. Jemand hat diese Funktionalität angefordert und befindet sich derzeit auf Platz 3 (http://goo.gl/SIDqA) in der Problemliste. – RLH

+0

Ich denke schon, aber ich war mir nicht sicher. Das Google-IO-Gespräch ist etwas irreführend [GeoPoint erwähnt] (http://youtu.be/7B7FyU9wW8Y?t=12m30s), aber es gibt kein solches Feld. Ich wusste nicht, dass es noch nicht veröffentlicht wurde oder die API-Implementierung hat sich geändert. –

Antwort

7

Am 28. Juni 2012 integrierte Google die GeoPoint class in die Google App Engine-Such-API-Bibliothek mit der speziellen Absicht, räumliche Punkte suchbar zu machen.

GeoPoints werden als GeoFields im Suchdokument gespeichert. Google stellt this support documentation zur Verfügung, um die Verwendung des GeoPoint mit der Such-API zu skizzieren.

Im folgenden Beispiel wird ein GeoPoint deklariert und einem GeoField in einem Suchdokument zugewiesen. Diese neuen Klassen bieten viel mehr Funktionalität als das, was unten aufgeführt ist, aber dieser Code ist ein Ausgangspunkt für ein grundlegendes Verständnis davon, wie die neue räumliche Suchfunktionalität verwenden ..

Konstruktion eines Dokuments mit einem zugehörigen GeoPoint

## IMPORTS ## 
from google.appengine.api import search 

def CreateDocument(content, lat, long): 
    geopoint = search.GeoPoint(lat, long) 
    return search.Document(
    fields=[ 
      search.HtmlField(name='content', value=content), 
      search.DateField(name='date', value=datetime.now().date()) 
      search.GeoField(name='location', value=geopoint) 
      ]) 

Suche im GeoPoint Dokumentenfeld (Ein wenig von der Search API-Dokumentation geändert)

## IMPORTS ## 
from google.appengine.api import search 

ndx = search.Index(DOCUMENT_INDEX) 
loc = (-33.857, 151.215) 

query = "distance(location, geopoint(-33.857, 151.215)) < 4500" 

loc_expr = "distance(location, geopoint(-33.857, 151.215))" 

sortexpr = search.SortExpression(
    expression=loc_expr, 
    direction=search.SortExpression.ASCENDING, default_value=4501) 

search_query = search.Query(
    query_string=query, 
    options=search.QueryOptions(
    sort_options=search.SortOptions(expressions=[sortexpr]))) 

results = index.search(search_query) 
Verwandte Themen