将Python字典转换为Solr查询字符串
我刚开始学习Python,现在在把一组request.POST参数转换成Solr查询语法时遇到麻烦。
这个表单的定义是这样的:
class SearchForm(forms.Form):
text = forms.CharField()
metadata = forms.CharField()
figures = forms.CharField()
提交后,这个表单需要生成一个URL编码的字符串,以便传递给一个URL客户端,格式大概是这样的:
text:myKeyword1+AND+metadata:myKeyword2+AND+figures:myKeyword3
看起来应该有个简单的方法来做到这一点。我能做到的最接近的是
for f, v in request.POST.iteritems():
if v:
qstring += u'%s\u003A%s+and+' % (f,v)
不过在这种情况下,冒号(\u003A)会导致Solr出错,因为它没有被正确编码。
有没有什么干净的解决办法呢?
谢谢!
3 个回答
0
可以使用 django-haystack。这个工具会帮你处理与Solr之间的所有交互,包括数据的索引和查询。
0
难道 u'\u003A'
不就是和 u':'
一样吗?在网址中,冒号会被转义成 %3A
吗?
qstring = '+AND+'.join(
[ u'%s%%3A%s'%(f,v) for f,v in request.POST.iteritems() if f]
)
1
我建议在表单中创建一个函数来处理这个问题,而不是在视图中处理。也就是说,在你调用 form.isValid() 来确保数据是有效的之后,你可以调用 form.generateSolrQuery()(或者你想要的任何名字)。
class SearchForm(forms.Form):
text = forms.CharField()
metadata = forms.CharField()
figures = forms.CharField()
def generateSolrQuery(self):
return "+and+".join(["%s\u003A%s" % (f,v) for f,v in self.cleaned_data.items()])