2012-04-21 64 views
6

我想通過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時,結果回來就好了。

回答

6

這裏是我如何得到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

1

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