谷歌应用引擎搜索API:工作硬编码,但不与变量

时间:2015-02-04 20:23:08

标签: python google-app-engine google-search-api

我有一个包含GeoField和NumberField的文档,如下所示:

document = search.Document(doc_id=str(self.id),
                               fields=[search.GeoField(name='loc',value=search.GeoPoint(20.0, 30.0)),
                                       search.NumberField(name='maxradius', value=10)])
search.Index(name='Professional').put(document)

当我查询时:

query = "distance(loc, geopoint(20.0, 30.0)) < 10"

我正确地得到了结果 但是当我查询:

query = "distance(loc, geopoint(20.0, 30.0)) < maxradius"

我得到RuntimeError: ValueError('could not convert string to float: maxradius',)

发生了什么,有什么想法吗?

2 个答案:

答案 0 :(得分:0)

引发的错误表明maxradius被视为字符串,无法转换为错误消息指定的浮点数。然后,如前所述,您需要动态设置此变量。您可以尝试这种方式,注意单引号而不是双引号来动态注入:

query = 'distance(location, geopoint(20.0, 30.0)) < %d' % maxradius

希望它有所帮助!

答案 1 :(得分:-1)

你想要的是这个:

maxradius = 10
query = "distance(loc, geopoint(20.0, 30.0)) < " + maxradius

编辑:

尝试这样的事情(不完全像这样):

query = "distance(loc, geopoint(20.0, 30.0)) < "
for i in range(10):
    do_something(query + i)

这将为您提供10个不同的查询字符串。您可以对其进行切换,并使其循环显示预定义值列表,例如:

maxradius = [1, 5, 23, 6, 2, 1, 77]
query = "distance(loc, geopoint(20.0, 30.0)) < "
for i in maxradius:
    do_something(query + i)

这是每个文档的最大半径不同的方法