将python dict转换为Solr查询字符串

将python dict转换为Solr查询字符串,python,django,solr,Python,Django,Solr,我刚刚开始学习Python,我一直在学习将一组request.POST参数转换为Solr查询语法所需的语法 用例是这样定义的表单: class SearchForm(forms.Form): text = forms.CharField() metadata = forms.CharField() figures = forms.CharField() text:myKeyword1+AND+metadata:myKeyword2+AND+figures:myKeywo

我刚刚开始学习Python,我一直在学习将一组request.POST参数转换为Solr查询语法所需的语法

用例是这样定义的表单:

class SearchForm(forms.Form):
    text = forms.CharField()
    metadata = forms.CharField()
    figures = forms.CharField()
text:myKeyword1+AND+metadata:myKeyword2+AND+figures:myKeyword3
提交时,表单需要生成url编码字符串,以传递给url客户端,如下所示:

class SearchForm(forms.Form):
    text = forms.CharField()
    metadata = forms.CharField()
    figures = forms.CharField()
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错误,因为它没有正确编码

做这件事的干净方法是什么


谢谢

难道
u'\u003A'
u':'
不一样吗,后者在URL中转义为
%3A

qstring = '+AND+'.join(
    [ u'%s%%3A%s'%(f,v) for f,v in request.POST.iteritems() if f]
    ) 

我建议在表单中创建一个函数来处理这个问题,而不是在视图中。因此,在调用form.isValid()以确保数据是可接受的之后。您可以调用form.generateSolrQuery()(或任何您想要的名称)


使用。它负责与Solr的所有接口,包括索引和查询。

但是urlencode构建了一个类似text=myKeyword1&metadata=myKeyword2的字符串。这不是我需要的语法(见上文)。我错过什么了吗?谢谢!我去看看。我已经在使用Solrpy了,它看起来很好,很轻。非常好的解决方案,谢谢!请注意,我认为较新版本的python使用“clean_data”而不是“clean_data”。但不确定这是否准确。