2012-04-21 14 views
6

Próbuję zapytać solr przez solrj w Eclipse. Próbowałem najnowszą solrj wiki przykład:Zapytanie Solr przez Solrj: Podstawy

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); 
    } 
} 

Jednak nie mogę ominąć ten błąd nie wiem co mam zrobić:

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 

Dalej, próbowałem przykład Książka kucharska

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")); 
      } 

     } 
    } 

Jednak ten przykład może być datowany dla bieżącego interfejsu API, ponieważ nie mogę nawet zaimportować biblioteki SolrQuery.

Czy ktoś ma szybki przykład, który działa?

Z góry dziękuję.

PS. Używam Windows 7 z tomcat7 i solr 3.5. Wszystko, co próbuję zrobić w tym momencie, jest podstawowym zapytaniem i otrzymuję wyniki z powrotem w jakiejś liście, tablicy, cokolwiek. Kiedy pytam: http://localhost:8080/solr/select/?q=outside w firefox, wyniki wracają dobrze.

Odpowiedz

6

Oto jak mam Solrj (Solr 3.6) działa na moim komputerze Windows7 z Eclipse:

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); 

    } 
} 

musiałem pobrać dodatkowe słoiki (poza Solr z 3.6) aby to działało: httpcomponents-client-4.2-beta1

W sumie potrzebowałem 4 słoiki, aby to działało:

  • Apache'owi SOLR-solrj-3.6.0.jar
  • httpclient-4,2-beta1.jar
  • httpcore-4,2-beta1.jar
  • httpmime-4,2-beta1.jar

Nie jestem pewien, czy moje rozwiązanie jest uważane za najlepszą praktykę pod względem kodu kotła, ale rozwiązuje problem wstawania na solrj w/eclipse.

+4

Użyłem dokładnie powyższego przykładu Java, ale wymagane były następujące pliki jar w mojej ścieżce budowania. 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

+0

+1 to też mi pomogło. – Aaron

1

Klasa org.slf4j.spi.LocationAwareLogger jest dostarczana przez słoik slf4j-api. Którą wersję używasz? Solr 3.5 wymaga wersji 1.6.1, podejrzewam, że używasz wersji dla haków.

Jeśli szukasz szybkiego startu Solrj, polecam przejście na Groovy. Może pobierać zależności słoika w czasie wykonywania, używając Grab annotations. Przykład:

+0

Mark, dziękuję za odpowiedź. Dla pewności, pobrałem Solr 3.6, skonfigurowałem i załadowałem do niektórych dokumentów. Stworzyłem nowy Eclipse proj & class, a następnie załadowałem nowe słoiki (z 3.6), a teraz bibliotekę: org.apache.solr.client.solrj.impl.CommonsHttpSolrServer; ma linię przez to i stwierdza: Typ CommonsHttpSolrServer jest przestarzały i nie będzie kompilacji (błędy na zewnątrz). Id raczej trzymać się j2se, ponieważ jestem z nim komfortowo. Wszelkie dodatkowe pomysły są mile widziane. Dzięki jeszcze raz. – Chris

+0

Edycja: Używanie: import org.apache.solr.client.solrj.SolrServer; zamiast: org.apache.solr.client.solrj.impl.CommonsHttpSolrServer; w 3.6 rozwiązuje powyższy problem (pierwotnie opublikowany problem). Jednak odpowiedź QueryResponse = server.query (params); wciąż wystrzeliwuje ten sam błąd powyżej ... Po prostu na wypadek, gdyby ktoś również w to wszedł ... – Chris

+0

Ta klasa została zdeprecjonowana przez wydanie Jira SOLR-2020. Zgodnie z Javadocs zastępuje go "HttpSolrServer", ale wprowadza to nowe zależności w bibliotekach Apache Http Components (Zobacz: http://wiki.apache.org/solr/ReleaseNote36) –