Я кодирую некоторые тесты для моего приложения 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());
}
Надеюсь, это поможет.