GoogleIO talk on Search API中我们可以根据地理位置进行搜索。
我找不到存储位置信息的appropriate field。
如何在document中存储地理定位信息,以便根据距离特定GPS位置的距离发出查询?
答案 0 :(得分:7)
2012年6月28日,Google将GeoPoint class集成到Google App Engine搜索API库中,其具体目的是使空间点可搜索。
GeoPoints在搜索文档中存储为GeoFields。 Google提供this support documentation概述了GeoPoint与Search API的使用。
以下示例声明了GeoPoint并将其分配给搜索文档中的GeoField。这些新类提供了比下面列出的功能更多的功能,但是这段代码是基本理解如何使用新的空间搜索功能的起点。
使用关联的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)
])
搜索GeoPoint文档字段(从Search API文档略微修改)
## 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)