Jython привязки для SOLR - PullRequest
       2

Jython привязки для SOLR

0 голосов
/ 18 января 2012

Существует множество независимых привязок Python для SOLR ( см. Здесь ).Какие из них доступны для Jython (то есть реализованы на чистом Python, а не на C-модулях) и какой вы бы порекомендовали?

См. Также Solr: лучший документированный, простой в использовании, стабильный API-интерфейс Python (пока не получило много полезных ответов)

1 Ответ

3 голосов
/ 27 января 2012

Я использую SOLR из Python (CPython) и из Scala (JVM). В обоих случаях я использую один и тот же API, а именно HTTP-клиент. Другими словами URL, такие как http://www.example.com:8080/solr/datacore/select?q=DocID:*&fl=DocID,Descr

URL создаются посредством композиции. Для запроса есть dict, содержащий имена полей в качестве ключей и совпадающие в качестве значений. Например, приведенный выше запрос будет выглядеть как {"DocID": "*"}. Этот dict соединяется с AND между каждым ключом. На самом деле значения - это списки, которые объединяются с использованием ИЛИ, поэтому более сложный запрос, такой как

{"DocType": ["Book","Paper",Letter"], "Length": ["[0 TO 200000]"]}

Превратится в запрос SOLR, как

DocType:Book OR Paper OR Letter AND Length:[0 TO 200000]

Композиция выполняется с простым объектом, где каждый метод возвращает себя, например:

def onlybooks(self):
   self.querydict["DocType"] = "Book"
   return self

Затем он используется в цепочке методов, например:

solrquery = onlybooks().specifiedauthor(params).biggestdoc(200000)

Все, кроме этого, является излишним и скрывает слишком много того, что происходит в неясной библиотеке, которую вы не сможете понять, не изучив ее код. Достаточно сложно понять всю мощь языка запросов SOLR и как эффективно его использовать. Не размещайте библиотеку между вами и SOLR, если для написания некоторых вспомогательных методов для создания URL-адреса запроса требуется всего лишь страница кода.

Кстати, если вы используете библиотеку и для ее работы требуется увидеть схему SOLR, не включайте схему SOLR в файл с вашим приложением. Просто получите его прямо с сервера в вашем приложении и кешируйте локально.

...