通过Solrj查询Solr:基础知识
我想通过Eclipse中的solrj查询solr。 我已经尝试了最新solrj wiki例如:通过Solrj查询Solr:基础知识
import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.CommonsHttpSolrServer;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.params.ModifiableSolrParams;
import java.net.MalformedURLException;
public class SolrQuery2 {
public static void main(String[] args) throws MalformedURLException, SolrServerException {
SolrServer solr = new CommonsHttpSolrServer("http://localhost:8080/solr");
// http://localhost:8080/solr/select/?q=outside
ModifiableSolrParams params = new ModifiableSolrParams();
params.set("qt", "/select");
params.set("q", "outside");
QueryResponse response = solr.query(params);
System.out.println("response = " + response);
}
}
但是,我不能让过去的这个错误,无论我做什么:
Exception in thread "main" java.lang.NoSuchMethodError:
org.slf4j.spi.LocationAwareLogger.log(Lorg/slf4j/Marker;Ljava/lang/String;ILjava/lang/String;[Ljava/lang/Object;Ljava/lang/Throwable;)V
接下来,我尝试了食谱例如:
import java.util.Iterator;
import org.apache.solr.client.solrj.SolrQuery; //Error: The import org.apache.solr.client.solrj.SolrQuery conflicts with a type defined in the same file
import org.apache.solr.client.solrj.impl.CommonsHttpSolrServer;
import org.apache.solr.client.solrj.impl.XMLResponseParser;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
public class SolrQuery {
public static void main(String[] args) throws Exception {
CommonsHttpSolrServer server = new CommonsHttpSolrServer("http://localhost:8080/solr");
server.setParser(new XMLResponseParser());
SolrQuery query = new SolrQuery();
query.setQuery("document"); //Error: The method setQuery(String) is undefined for the type SolrQuery
query.setStart(0); //Error: The method setStart(int) is undefined for the type SolrQuery
query.setRows(10); //Error: The method setRows(int) is undefined for the type SolrQuery
QueryResponse response = server.query(query); //Error: The method query(SolrParams) in the type SolrServer is not applicable for the arguments (SolrQuery)
SolrDocumentList documents = response.getResults();
Iterator<SolrDocument> itr = documents.iterator();
System.out.println("DOCUMENTS");
while(itr.hasNext()){
SolrDocument doc = itr.next();
System.out.println(doc.getFieldValue("id")+":"+doc.getFieldValue("content"));
}
}
}
但是,这个例子可能会针对当前api过期,因为我甚至不能导入SolrQuery库。
有没有人有一个快速样板工程?
预先感谢您。
PS。我使用tomcat7和solr 3.5运行windows7。我现在想要做的只是一个基本的查询,并将结果返回到某种列表,数组等等。当我在Firefox中查询:http://localhost:8080/solr/select/?q=outside
时,结果回来就好了。
这里是我如何得到Solrj(Solr的3.6)在我的Windows7的盒子正与日食:
import java.net.MalformedURLException;
import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.HttpSolrServer;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.params.ModifiableSolrParams;
public class SolrQuery {
public static void main(String[] args) throws MalformedURLException, SolrServerException {
SolrServer server = new HttpSolrServer("http://localhost:8080/solr");
ModifiableSolrParams params = new ModifiableSolrParams();
params.set("q", "1");
QueryResponse response = server.query(params);
System.out.println("response = " + response);
}
}
我必须下载额外的罐子(的Solr的外3.6)为此工作:httpcomponents-client-4.2-beta1
总共,我需要4个罐子才能得到这个工作:
- Apache的solr的-solrj-3.6.0.jar
- HttpClient的-4.2-beta1.jar
- 的HttpCore-4.2-beta1.jar
- httpmime-4.2-beta1.jar
我不确定我的解决方案是否被认为是锅炉代码方面的最佳实践,但它解决了solrj w/eclipse问题。
org.slf4j.spi.LocationAwareLogger类是由slf4j-api jar提供的。你正在运行什么版本? Solr 3.5需要版本1.6.1,我怀疑你使用的是收费版本。
如果您正在寻找Solrj快速入门,我建议您切换到Groovy。它可以使用Grab annotations在运行时下载jar依赖项。例如:
马克,感谢您的回复。可以肯定的是,我下载了Solr 3.6,设置并加载了一些文档。我创建了一个新的Eclipse Proj&Class,然后加载了新的jar(从3.6开始),现在加载了库:org.apache.solr.client.solrj.impl.CommonsHttpSolrServer;有一条通过它并指出:CommonsHttpSolrServer类型已被弃用,并且不会编译(错误输出)。我宁愿坚持j2se,因为我对此感到舒服。任何更多的想法非常感谢。再次感谢。 – Chris 2012-04-21 18:55:10
编辑:使用:import org.apache.solr.client.solrj.SolrServer;而不是:org.apache.solr.client.solrj.impl.CommonsHttpSolrServer;在3。6纠正上述问题(原贴问题)。但是QueryResponse响应= server.query(params);仍然发回上面的同样的错误...只是fyi,如果有人遇到这个以及... – Chris 2012-04-21 20:29:05
该类已被Jira问题SOLR-2020拒绝。根据Javadocs,它被替换为“HttpSolrServer”,但是这会在Apache Http组件库中引入新的依赖关系(请参阅:http://wiki.apache.org/solr/ReleaseNote36) – 2012-04-21 23:36:52
我完全使用了上面的Java示例,但我需要在我的构建路径中具有以下jar文件。 commons-logging-1.1.1.jar,httpclient-4.2.1.jar,httpcore-4.2.1.jar,httpmime-4.2.1.jar,slf4j-api-1.6.4.jar,slf4j-simple- 1.6.4.jar,solr-solrj-3.6.0.jar – Adam 2012-08-09 14:27:53
+1这也帮助了我。 – Aaron 2012-08-17 19:01:06