2009-06-01 5 views
17

solr-indexer 어플리케이션에 대한 테스트를 코딩하고 있습니다. 테스트 모범 사례에 따라 코드를 자립적으로 작성하고 schema.xmlsolrconfig.xml을로드하고 인덱싱 검색 테스트를위한 임시 데이터 트리를 만듭니다. 응용 프로그램이 대부분 Java로 작성되었으므로 SolrJ 라이브러리를 다루고 있지만 문제가 발생합니다 (코어 컨테이너 - 코어 디스크립터 - coreconfig-solrcore ...)의 잃어버린 부분입니다. 누구나 사용할 수 있습니다. 여기에 config를로드하고 매개 변수가있는 데이터 디렉토리에 기록하는 Embedded Server를 만드는 몇 가지 코드가 있습니까?Embedded Server를 통해 Solr 테스트하기

+3

주의! JUnit 4.7만이 아래에 설명 된 접근 방식을 지원한다고 믿습니다. JUnit의 최신 버전에서 Solr Base 테스트로 발생하는 일종의 setup() 동적 호출 오류가 있습니다. – jayunit100

+0

나는 비슷한 질문에 답을 찾아왔다. http://stackoverflow.com/a/23102896/1410035 –

답변

10

SolrExampleTests으로 시작하여 SolrExampleTestBase까지 확장되는 AbstractSolrTestCase으로 시작할 수 있습니다.

이 또한 SampleTest입니다.

thisthis 스레드를 살펴보십시오.

+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

이것은 sol 버전 ​​1.4를 말합니다. 이러한 클래스의 3.5 버전이 필요하다면 중앙에 solr-test-framework 아티팩트가 있습니다. http://mvnrepository.com/artifact/org.apache.solr/solr-test-framework – unscene

7

이것은 간단한 테스트 케이스의 예입니다.

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

더 많은 정보를 원하시면,이 블로그 게시물을 참조하십시오 : Solr Integration Tests

+1

junit 4.7을 사용하는 경우이 방법론을 사용할 수 있습니다. 더 높은 JUnit을 사용한다면 지금은 할 수 없습니다. – jayunit100

5

먼저 당신이 solrconfig를 포함 solr.xml과의 conf 폴더가 포함 된 SOLR 홈 디렉토리를 설정해야합니다 SOLR은 SOLR 구성 파일이 들어있는 디렉토리입니다. xml, schema.xml 등.

그런 다음이 간단한 코드를 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()); 
} 

이 정보가 도움이되기를 바랍니다.