2012-04-21 11 views
6

Estoy tratando de consultar Solr a través de Solrj en Eclipse. He probado el último solrj wiki ejemplo:Consulta de Solr a través de Solrj: Conceptos básicos

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

Sin embargo, no puedo conseguir más allá de este error, no importa lo que hago:

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 

A continuación, probé el ejemplo de libros de cocina:

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

     } 
    } 

Sin embargo, ese ejemplo podría estar fechado para la API actual, ya que ni siquiera puedo importar la biblioteca de SolrQuery.

¿Alguien tiene un ejemplo repetitivo que funciona?

Gracias de antemano.

PS. Estoy ejecutando windows7 con tomcat7 y solr 3.5. Todo lo que estoy tratando de hacer en este punto es una consulta básica y obtener los resultados en algún tipo de lista, matriz, lo que sea. Cuando consulto: http://localhost:8080/solr/select/?q=outside en firefox, los resultados vuelven bien.

Respuesta

6

Aquí es cómo llegué SolrJ (Solr 3.6) que trabajan en mi caja de Windows 7 con 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); 

    } 
} 

tuve que descargar frascos adicionales (fuera de Solr de 3.6) para que esto funcione: httpcomponents-client-4.2-beta1

En total, necesitaba 4 jarros para que esto funcione:

  • apache-Solr-SolrJ-3.6.0.jar
  • httpclient-4,2-beta1.jar
  • httpcore-4,2-beta1.jar
  • httpmime-4,2-beta1.jar

No estoy seguro si mi solución se considera una mejor práctica en términos de boilercode, pero resuelve el problema de levantarse en solrj w/eclipse.

+4

Utilicé exactamente el ejemplo de Java anterior, pero se me exigió tener los siguientes archivos jar en mi ruta de compilación. 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 esto me ayudó también. – Aaron

1

La clase org.slf4j.spi.LocationAwareLogger es proporcionada por el jar slf4j-api. ¿Qué versión estás ejecutando? Solr 3.5 requiere la versión 1.6.1. Sospecho que está usando una versión para principiantes.

Si está buscando un inicio rápido en Solrj, le recomiendo cambiar a Groovy. Puede descargar las dependencias de jar en tiempo de ejecución usando Grab annotations. Ejemplo:

+0

Marcos, gracias por su respuesta. Solo para estar seguro, descargué Solr 3.6, lo configuré y lo cargué en algunos documentos. Creé un nuevo Eclipse proj & class y luego cargué los nuevos archivos jar (de 3.6), y ahora la biblioteca: org.apache.solr.client.solrj.impl.CommonsHttpSolrServer; tiene una línea y dice: El tipo CommonsHttpSolrServer está en desuso y no se compilará (errores de salida). Id más bien quedarme con j2se ya que me siento cómodo con él. Cualquier otra idea es muy apreciada. Gracias de nuevo. – Chris

+0

Editar: Usando: importación org.apache.solr.client.solrj.SolrServer; en lugar de: org.apache.solr.client.solrj.impl.CommonsHttpSolrServer; en 3.6 corrige el problema anterior (problema publicado originalmente). Sin embargo, QueryResponse response = server.query (params); todavía dispara el mismo error arriba ... Solo fyi en caso de que alguien se encuentre con esto también ... – Chris

+0

Esa clase ha sido depreciada por el problema Jira SOLR-2020. Según Javadocs, se reemplaza por "HttpSolrServer", pero esto introduce nuevas dependencias en las bibliotecas de componentes de Apache Http (Ver: http://wiki.apache.org/solr/ReleaseNote36) –

Cuestiones relacionadas