Clojure / Solr: исключение при попытке использовать org.apache.solr.client.solrj.impl.CommonsHttpSolrServer из Clojure - PullRequest
2 голосов
/ 02 марта 2012

Я пытаюсь обновить библиотеку clojure-solr до версии 1.3 (я изначально ее не писал, это форк), и я сталкиваюсь с проблемой при взаимодействии с apache-solr-3.5.0. Вот обновленная библиотека на github:

https://github.com/antler/clojure-solr

Это очень простой однофайловый проект, который в основном просто импортирует базовые Java-классы. Я пытаюсь подключиться к примеру приложения solr, который поставляется в комплекте с выпуском solr 3.5.0 (это одно зеркало):

http://www.fightrice.com/mirrors/apache//lucene/solr/3.5.0/

В этом выпуске я перехожу к примеру / и запускаю

java -jar start.jar

Кажется, это работает нормально. Затем из repl в проекте clojure-solr (после запуска lein deps):

(use 'clojure-solr)

(with-connection (connect "http://127.0.0.1:8983/solr") 
  (add-document! {"id" "testdoc", "name" "A Test Document"})
  (add-documents! [{"id" "testdoc.2", "name" "Another test"}
                   {"id" "testdoc.3", "name" "a final test"}])
  (commit!)
  (search "test")
  (search "test" :rows 2))

Это из примера, приведенного в библиотеке изначально. Вызов для подключения выполняется нормально, но не удается добавить при следующем исключении:

IllegalArgumentException No matching field found: add 
  for class org.apache.solr.client.solrj.impl.CommonsHttpSolrServer

Я зарегистрировался в solr docs, и метод add определенно есть:

http://lucene.apache.org/solr/api/org/apache/solr/client/solrj/impl/CommonsHttpSolrServer.html

Что мне здесь не хватает? Спасибо за любую помощь!

Ответы [ 4 ]

3 голосов
/ 12 марта 2012

clojure-solr превращает вектор документов в массив в add-documents!. Однако для массива .add метод CommonsHttpSolrServer отсутствует.

Изменение clojure-solr для передачи вектора может решить проблему, поскольку вектор реализует java.util.List - и, следовательно, java.util.Collection. Не испытано. Просто предположение.

1 голос
/ 14 марта 2012

Эта ссылка объясняет, как отладить подобную ошибку:

http://groups.google.com/group/clojure/msg/f038decc18c7da37?pli=1

Это даст вам лучшее представление о том, что пошло не так.Я углублюсь в это, так как это выглядит интересно, но, возможно, вы можете использовать один из методов отладки, описанных там.

0 голосов
/ 26 апреля 2019

По состоянию на 2019 оболочка corr clojure solr - путь.

(corona.index/add! client-config [{"id" "testdoc.2", "name" "Another test"}
                                  {"id" "testdoc.3", "name" "a final test"}])

Не зависит от Solrj, а напрямую от REST API.

Пример использования здесь: https://github.com/Stylitics/corona-demo

0 голосов
/ 18 марта 2012

Как насчет использования что-то вроде:

(add-documents! (list {"id" "testdoc.2", "name" "Another test"}
                   {"id" "testdoc.3", "name" "a final test"}))

ИЛИ

(add-documents! '({"id" "testdoc.2", "name" "Another test"}
                   {"id" "testdoc.3", "name" "a final test"}))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...