我有一个包含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',)
发生了什么,有什么想法吗?
答案 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)
这是每个文档的最大半径不同的方法