Тестирование Solr через встроенный сервер - PullRequest
17 голосов
/ 02 июня 2009

Я пишу несколько тестов для моего приложения solr-indexer. Следуя рекомендациям по тестированию, я хочу написать код самостоятельно, просто загрузив schema.xml и solrconfig.xml и создав временное дерево данных для тестов индексации-поиска. Поскольку приложение больше всего написано на Java, я имею дело с библиотекой SolrJ, но у меня возникают проблемы (ну, я потерялся во вселенной corecontainers-coredescriptor-coreconfig-solrcore ...) Любой может разместить здесь некоторый код для создания встроенного сервера, который загружает конфигурацию, а также записывает данные в каталог данных с параметрами?

Ответы [ 3 ]

12 голосов
/ 02 июня 2009

Вы можете начать с SolrExampleTests , который расширяет SolrExampleTestBase , который расширяет AbstractSolrTestCase .

Также это SampleTest .

Также взгляните на это и это темы.

7 голосов
/ 05 марта 2011

Это пример для простого теста. solr - это каталог, в котором находятся ваши файлы конфигурации 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"));
    }
}

Для получения дополнительной информации см. Этот пост в блоге: Интеграционные тесты Solr

5 голосов
/ 22 августа 2012

Сначала вам нужно установить домашний каталог Solr, содержащий solr.xml и папку conf, содержащую solrconfig.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());
}

Надеюсь, это поможет.

...