通过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问题。

+4

我完全使用了上面的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

+0

+1这也帮助了我。 – Aaron 2012-08-17 19:01:06

org.slf4j.spi.LocationAwareLogger类是由slf4j-api jar提供的。你正在运行什么版本? Solr 3.5需要版本1.6.1,我怀疑你使用的是收费版本。

如果您正在寻找Solrj快速入门,我建议您切换到Groovy。它可以使用Grab annotations在运行时下载jar依赖项。例如:

+0

马克,感谢您的回复。可以肯定的是,我下载了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

+0

编辑:使用: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

+0

该类已被Jira问题SOLR-2020拒绝。根据Javadocs,它被替换为“HttpSolrServer”,但是这会在Apache Http组件库中引入新的依赖关系(请参阅:http://wiki.apache.org/solr/ReleaseNote36) – 2012-04-21 23:36:52