Clojure / Solr:尝试使用Clojure中的org.apache.solr.client.solrj.impl.CommonsHttpSolrServer时出现异常

时间:2012-03-02 19:36:44

标签: solr clojure

我正在尝试将clojure-solr库升级到1.3(我最初没有写它,这是一个fork),并且在与apache-solr-3.5.0交互时遇到了问题。这是github上的更新库:

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

这是一个非常简单的一个文件项目,基本上只是导入准系统java类。我正在尝试连接到与solr 3.5.0版本捆绑在一起的solr示例应用程序(这是一个镜像):

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

在这个版本中,我进入示例/并运行

java -jar start.jar

这似乎工作正常。然后,从clojure-solr项目中的repl(运行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))

这是来自原始库中给出的示例。对connect的调用运行正常,但在添加时失败,出现以下异常:

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

我检查了solr文档,并且add方法肯定存在:

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

我在这里缺少什么?谢谢你的帮助!

4 个答案:

答案 0 :(得分:3)

clojure-solr将文档向量转换为add-documents!中的数组。但是,对于数组,.add没有CommonsHttpSolrServer方法。

更改clojure-solr以传递向量可能会解决问题,因为向量实现了java.util.List - 因此java.util.Collection。没有测试过。只是一个猜测。

答案 1 :(得分:1)

此链接说明了如何调试类似错误:

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

它可以让您更好地了解出了什么问题。我会更深入地了解它,因为它看起来很有趣,但也许您可以使用其中描述的一种调试技术。

答案 2 :(得分:0)

如何使用以下内容:

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

OR

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

答案 3 :(得分:0)

从2019年起corona clojure solr wrapper是前进的道路。

(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