16

我正在为我的 solr-indexer 应用程序编写一些测试。遵循测试最佳实践,我想编写独立的代码,只需加载schema.xmlsolrconfig.xml为索引搜索测试创建一个临时数据树。由于应用程序大部分是用 java 编写的,我正在处理 SolrJ 库,但我遇到了问题(好吧,我迷失在 corecontainers-coredescriptor-coreconfig-solrcore 的世界中......)任何人都可以在这里放置一些用于创建加载配置并写入参数传递数据目录的嵌入式服务器的代码?

4

3 回答 3

12

您可以从扩展 SolrExampleTestBase 的SolrExampleTests开始后者扩展AbstractSolrTestCase

还有这个SampleTest

还要看看这个这个线程。

于 2009-06-01T23:23:20.017 回答
7

这是一个简单测试用例的示例。solr 是包含您的 solr 配置文件的目录:

导入 java.io.IOException;
导入 org.apache.solr.client.solrj.embedded.EmbeddedSolrServer;
导入 org.apache.solr.util.AbstractSolrTestCase;
导入 org.apache.solr.client.solrj.SolrQuery;
导入 org.apache.solr.client.solrj.SolrServer;
导入 org.apache.solr.client.solrj.SolrServerException;
导入 org.apache.solr.client.solrj.response.QueryResponse;
导入 org.apache.solr.common.SolrInputDocument;
导入 org.apache.solr.common.params.SolrParams;
导入 org.junit.Before;
导入 org.junit.Test;

导入静态 org.junit.Assert.assertEquals;

公共类 SolrSearchConfigTest 扩展 AbstractSolrTestCase {

    私有 SolrServer 服务器;

    @覆盖
    公共字符串 getSchemaFile() {
        返回“solr/conf/schema.xml”;
    }

    @覆盖
    公共字符串 getSolrConfigFile() {
        返回“solr/conf/solrconfig.xml”;
    }

    @前
    @覆盖
    公共 void setUp() 抛出异常 {
        super.setUp();
        server = new EmbeddedSolrServer(h.getCoreContainer(), h.getCore().getName());
    }

    @测试
    公共无效 testThatNoResultsAreReturned() 抛出 SolrServerException {
        SolrParams params = new SolrQuery("找不到的文本");
        QueryResponse 响应 = server.query(params);
        assertEquals(0L, response.getResults().getNumFound());
    }

    @测试
    公共无效 testThatDocumentIsFound() 抛出 SolrServerException,IOException {
        SolrInputDocument 文档 = new SolrInputDocument();
        document.addField("id", "1");
        document.addField("姓名", "我的名字");

        server.add(文档);
        server.commit();

        SolrParams 参数 = new SolrQuery("name");
        QueryResponse 响应 = server.query(params);
        assertEquals(1L, response.getResults().getNumFound());
        assertEquals("1", response.getResults().get(0).get("id"));
    }
}

有关更多信息,请参阅此博文:Solr 集成测试

于 2011-03-05T08:25:46.623 回答
5

首先,您需要设置包含 solr.xml 的 Solr 主目录和包含 solrconfig.xml、schema.xml 等的 conf 文件夹。

之后,您可以为 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());
}

我希望这有帮助。

于 2012-08-22T10:38:57.203 回答