Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 谷歌应用程序引擎搜索API:使用硬编码但不使用变量_Python_Google App Engine_Google Search Api - Fatal编程技术网

Python 谷歌应用程序引擎搜索API:使用硬编码但不使用变量

Python 谷歌应用程序引擎搜索API:使用硬编码但不使用变量,python,google-app-engine,google-search-api,Python,Google App Engine,Google Search Api,我有一个带有地理域和数字域的文档,如下所示: document = search.Document(doc_id=str(self.id), fields=[search.GeoField(name='loc',value=search.GeoPoint(20.0, 30.0)), search.NumberField(name='maxradius', v

我有一个带有地理域和数字域的文档,如下所示:

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=“距离(loc,地质点(20.0,30.0))<10”
我得到的结果是正确的 但当我提出疑问时:

query = "distance(loc, geopoint(20.0, 30.0)) < maxradius"
query=“距离(loc,地质点(20.0,30.0))
我得到
RuntimeError:ValueError('无法将字符串转换为float:maxradius',)

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

您想要的是:

maxradius = 10
query = "distance(loc, geopoint(20.0, 30.0)) < " + maxradius
maxradius=10
query=“距离(loc,地质点(20.0,30.0))<”+最大半径
编辑:

尝试这样的方法(不完全像这样):

query=“距离(loc,地质点(20.0,30.0))<”
对于范围(10)内的i:
做某事(查询+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)
maxradius=[1,5,23,6,2,1,77]
query=“距离(loc,地质点(20.0,30.0))<”
对于maxradius中的i:
做某事(查询+i)

这就是如何为每个文档设置不同的最大半径的方法。引发的错误表明,maxradius被视为字符串,无法转换为错误消息指定的浮点值,然后如上所述,您需要动态设置此变量。您可以这样尝试,请注意要动态注入的单引号而不是双引号:

query = 'distance(location, geopoint(20.0, 30.0)) < %d' % maxradius
query='距离(位置,地质点(20.0,30.0))<%d'%maxradius

希望有帮助

不,我想为每个文档使用不同的maxradius。这对我不好。那么你可以在一个简单的for循环中调整
maxradius
变量。这里最重要的一点是将原始查询设置为距离(loc,geopoint(20.0,30.0))<”
,然后添加变量(将转换为字符串),我不知道您想要什么。你问了一个问题,现在你有了两个有效的答案。不要抱怨我们没有回答你的问题。我们都修复了python运行时错误。我建议你看看其中的一些,这样你就可以理解一些基本的编程思想,然后再问一个不同的问题。我不是在抱怨,我感谢你抽出时间回答。你的建议确实解决了错误,但没有达到目标。如果我想不断地向我的查询注入信息,我就不会费心问这个问题了。我的项目的想法是根据两个公司的位置为公司提供客户,而不是为距离太远的公司提供客户,因此每个公司都设置自己的maxradius。您的建议为每个人提供了一个maxradius解决方案。我的意思是,就像每个文档中的位置不同一样,我需要maxradius不同。maxradius表示为给定业务吸引客户的最大距离,每个企业都可以设置自己的maxradius。我怀疑在当前的AppEngine搜索API中无法做到这一点。有关文档,请参阅,尽管它没有明确说明这一点。我认为您应该使用一个较大的固定maxradius(例如100km/10000m),然后将距离作为查询选项中指定的字段表达式返回,然后您必须使用每个maxradius手动筛选列表。
query = 'distance(location, geopoint(20.0, 30.0)) < %d' % maxradius