Я кодирую некоторые тесты для моего приложения solr-indexer. Следуя рекомендациям по тестированию, я хочу написать код самостоятельно, просто загружая schema.xml и solrconfig.xml и создавая временное дерево данных для проверок индексации.
Поскольку приложение больше всего написано в java, я имею дело с библиотекой SolrJ, но у меня возникают проблемы (ну, я потерялся во вселенной corecontainers-coredescriptor-coreconfig-solrcore...)
Любой может разместить здесь некоторый код для создания встроенного сервера, который загружает конфигурацию, а также записывает в файл данных с параметром dir?
Тестирование Solr через встроенный сервер
Ответ 1
Вы можете начать с SolrExampleTests, который расширяет SolrExampleTestBase, который расширяет AbstractSolrTestCase.
Также этот SampleTest.
Ответ 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());
}
Надеюсь, это поможет.