Подтвердить что ты не робот

Тестирование Solr через встроенный сервер

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

4b9b3361

Ответ 2

Это пример простого тестового примера. 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 Integration Tests

Ответ 3

Сначала вам нужно установить свой домашний каталог 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());
}

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