2009-06-01 7 views
17

Estoy codificando algunas pruebas para mi aplicación solr-indexer. Después de probar las mejores prácticas, deseo escribir código autodependiente, simplemente cargando el schema.xml y solrconfig.xml y creando un árbol de datos temporales para las pruebas de búsqueda de indexación. Como la aplicación está escrita en Java, estoy lidiando con la biblioteca SolrJ, pero estoy teniendo problemas (bueno, estoy perdido en el universo de corecontainers-coredescriptor-coreconfig-solrcore ...) Cualquiera puede ubicar aquí algún código para crear un Servidor Integrado que carga la configuración y también escribe en un dir de datos con parámetros pasados?Prueba de Solr a través del Servidor Integrado

+3

CUIDADO !!!! Solo JUnit 4.7 apoya los enfoques que se detallan a continuación, creo. Existe algún tipo de error de invocación dinámica de instalación() que se produce en las versiones más recientes de JUnit con la prueba Solr Base. – jayunit100

+0

Pude responder una pregunta similar aquí: http://stackoverflow.com/a/23102896/1410035 –

Respuesta

10

Puede comenzar con el SolrExampleTests que se extiende SolrExampleTestBase que se extiende AbstractSolrTestCase.

También esto SampleTest.

También eche un vistazo a this y this hilos.

+1

SolrExampleTests: http://svn.apache.org/repos/asf/lucene/solr/tags/release- 1.4.0/src/test/org/apache/solr/client/solrj/SolrExampleTests.java – High6

+2

Esto se refiere a las versiones 1.4 de solr. Si necesita las versiones 3.5 de esas clases, existe un artefacto solr-test-framework en maven central. http://mvnrepository.com/artifact/org.apache.solr/solr-test-framework – unscene

7

Este es un ejemplo para un caso de prueba simple. Solr es el directorio que contiene sus archivos de configuración Solr:

 
import java.io.IOException; 
import org.apache.solr.client.solrj.embedded.EmbeddedSolrServer; 
import org.apache.solr.util.AbstractSolrTestCase; 
import org.apache.solr.client.solrj.SolrQuery; 
import org.apache.solr.client.solrj.SolrServer; 
import org.apache.solr.client.solrj.SolrServerException; 
import org.apache.solr.client.solrj.response.QueryResponse; 
import org.apache.solr.common.SolrInputDocument; 
import org.apache.solr.common.params.SolrParams; 
import org.junit.Before; 
import org.junit.Test; 

import static org.junit.Assert.assertEquals; 

public class SolrSearchConfigTest extends AbstractSolrTestCase { 

    private SolrServer server; 

    @Override 
    public String getSchemaFile() { 
     return "solr/conf/schema.xml"; 
    } 

    @Override 
    public String getSolrConfigFile() { 
     return "solr/conf/solrconfig.xml"; 
    } 

    @Before 
    @Override 
    public void setUp() throws Exception { 
     super.setUp(); 
     server = new EmbeddedSolrServer(h.getCoreContainer(), h.getCore().getName()); 
    } 

    @Test 
    public void testThatNoResultsAreReturned() throws SolrServerException { 
     SolrParams params = new SolrQuery("text that is not found"); 
     QueryResponse response = server.query(params); 
     assertEquals(0L, response.getResults().getNumFound()); 
    } 

    @Test 
    public void testThatDocumentIsFound() throws SolrServerException, IOException { 
     SolrInputDocument document = new SolrInputDocument(); 
     document.addField("id", "1"); 
     document.addField("name", "my name"); 

     server.add(document); 
     server.commit(); 

     SolrParams params = new SolrQuery("name"); 
     QueryResponse response = server.query(params); 
     assertEquals(1L, response.getResults().getNumFound()); 
     assertEquals("1", response.getResults().get(0).get("id")); 
    } 
} 

Ver esta entrada de blog para más información: Solr Integration Tests

+1

Expondré todas las respuestas con una nueva respuesta, que es: si está utilizando el punto 4.7, puede usar esta metodología. Si usa un JUnit más alto, por ahora, no puede. – jayunit100

5

En primer lugar es necesario configurar el directorio básico Solr que contiene la carpeta que contiene solr.xml y conf solrconfig. xml, schema.xml etc.

Después de eso, puede utilizar este código simple y básico para Solrj.

File solrHome = new File("Your/Solr/Home/Dir/"); 
File configFile = new File(solrHome, "solr.xml"); 
CoreContainer coreContainer = new CoreContainer(solrHome.toString(), configFile); 
SolrServer solrServer = new EmbeddedSolrServer(coreContainer, "Your-Core-Name-in-solr.xml"); 
SolrQuery query = new SolrQuery("Your Solr Query"); 
QueryResponse rsp = solrServer.query(query); 
SolrDocumentList docs = rsp.getResults(); 
Iterator<SolrDocument> i = docs.iterator(); 
while (i.hasNext()) { 
     System.out.println(i.next().toString()); 
} 

Espero que esto ayude.

Cuestiones relacionadas