GoogleIO中关于 Search API 的指示表明我们可以根据地理位置进行搜索。
我找不到合适的字段来存储位置信息。
如何在文档中存储地理位置信息,以便我可以根据与特定 GPS 位置的距离发出查询?
2012 年 6 月 28 日,Google 将GeoPoint 类集成到 Google App Engine 搜索 API 库中,其特定目的是使空间点可搜索。
GeoPoints 作为 GeoFields 存储在搜索文档中。Google 提供了此支持文档,概述了 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)