clojure-solr-0.2.0 и solr4

Я пытаюсь заставить clojure-solr-0.2.0 работать с solr4 (ночная сборка магистрали). Я получаю следующее исключение:

Caused by: java.lang.RuntimeException: Invalid version or the data in not in 'javabin' format
at org.apache.solr.common.util.JavaBinCodec.unmarshal(JavaBinCodec.java:99)
at org.apache.solr.client.solrj.impl.BinaryResponseParser.processResponse(BinaryResponseParser.java:39)
at org.apache.solr.client.solrj.impl.CommonsHttpSolrServer.request(CommonsHttpSolrServer.java:466)
at org.apache.solr.client.solrj.impl.CommonsHttpSolrServer.request(CommonsHttpSolrServer.java:243)
at org.apache.solr.client.solrj.request.QueryRequest.process(QueryRequest.java:89)

Я предполагаю, что это связано с тем, что clojure-solr использует некоторую версию библиотеки solrj из кодовой базы solr3, а формат javabin изменяется между версиями.

Есть ли простой способ заставить это работать?

РЕДАКТИРОВАТЬ:

Я удалил solrj из папки lib моего проекта и заменил его на lib/apache-solr-solrj-4.0-2012-05-15_08-20-37.jar. Я надеялся, что это сработает, поскольку одни и те же классы (должны) быть найдены в пути к классам во время выполнения (транзитивная зависимость должна требоваться только тогда, когда lein deps запускается для получения зависимостей (или так я рассуждал). В результате класс не найден во время выполнения:

Caused by: java.lang.ClassNotFoundException:    org.apache.solr.client.solrj.impl.CommonsHttpSolrServer
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at clojure.lang.DynamicClassLoader.findClass(DynamicClassLoader.java:61)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:169)
at clojure_solr$eval1423$loading__4414__auto____1424.invoke(clojure_solr.clj:1)
at clojure_solr$eval1423.invoke(clojure_solr.clj:1)
at clojure.lang.Compiler.eval(Compiler.java:5424)
... 95 more

И проблема в том, что CommonsHttpSolrServer больше нет в банке:

$ jar tf lib/apache-solr-solrj-4.0-2012-05-15_08-20-37.jar |grep Http
org/apache/solr/client/solrj/impl/HttpSolrServer$1.class
org/apache/solr/client/solrj/impl/HttpSolrServer$2.class
org/apache/solr/client/solrj/impl/HttpSolrServer$3.class
org/apache/solr/client/solrj/impl/HttpSolrServer$DeflateDecompressingEntity.class
org/apache/solr/client/solrj/impl/HttpSolrServer$GzipDecompressingEntity.class
org/apache/solr/client/solrj/impl/HttpSolrServer$UseCompressionRequestInterceptor.class
org/apache/solr/client/solrj/impl/HttpSolrServer$UseCompressionResponseInterceptor.class
org/apache/solr/client/solrj/impl/HttpSolrServer.class
org/apache/solr/client/solrj/impl/LBHttpSolrServer$1.class
org/apache/solr/client/solrj/impl/LBHttpSolrServer$Req.class
org/apache/solr/client/solrj/impl/LBHttpSolrServer$Rsp.class
org/apache/solr/client/solrj/impl/LBHttpSolrServer$ServerWrapper.class
org/apache/solr/client/solrj/impl/LBHttpSolrServer.class
$ jar tf lib/apache-solr-solrj-4.0-2012-05-15_08-20-37.jar |grep CommonsHttp
$

person Kevin    schedule 18.05.2012    source источник
comment
У меня это не сработало, и в конце концов я понял, что с clj-http + clj-json гораздо проще иметь дело.   -  person Kevin    schedule 19.05.2012


Ответы (1)


вам, скорее всего, потребуется создать собственную сборку clojure-solr и исправить ее для работы с последней версией solr4. Это на самом деле не так уж сложно.

  • клонируйте его из проекта github
  • лейн установить
  • добавьте его как зависимость в свой основной проект
  • взломать и повторить.
person Arthur Ulfeldt    schedule 18.05.2012
comment
Я предполагаю, что главное - просто изменить версию зависимости solrj, мне почти интересно, могу ли я просто исключить solrj из clojure-solr и включить свою собственную версию. И я предполагаю, что для этого я могу взять solrj lib из nightly и maven установить файл? - person Kevin; 19.05.2012
comment
Что произойдет, если вы явно включите нужную версию solrj? Выигрывает ли он над переходным? Работает нормально? - person Jeremy; 19.05.2012
comment
Я думаю, что необходимо только убедить clojure-solr зависеть от более новой версии solr и сделать эту версию доступной во время выполнения. - person Arthur Ulfeldt; 19.05.2012
comment
отмечен как правильный, поскольку то, что вы говорите, вероятно, работает, но, как я уже отмечал в своих комментариях, с использованием clj-http + clj-json гораздо проще иметь дело. - person Kevin; 20.07.2012