Перевести диктон Python в строку запроса Solr - PullRequest
0 голосов
/ 05 февраля 2010

Я только начинаю работать с 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 ]

1 голос
/ 05 февраля 2010

Я бы порекомендовал создать функцию в форме, чтобы обрабатывать это, а не в представлении. Поэтому после вызова 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()])
0 голосов
/ 05 февраля 2010

Использование Джанго-Хейстек . Он заботится обо всем взаимодействии с Solr - как индексация, так и запросы.

0 голосов
/ 05 февраля 2010

Не является ли u'\u003A' просто таким же, как u':', который экранируется в URL как %3A?

qstring = '+AND+'.join(
    [ u'%s%%3A%s'%(f,v) for f,v in request.POST.iteritems() if f]
    ) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...