gpt4 book ai didi

java - 测试 Solr 分布式组件

转载 作者:搜寻专家 更新时间:2023-11-01 02:44:39 25 4
gpt4 key购买 nike

我开发了一个自定义 Solr 搜索组件,我需要为其编写单元测试。正如我在其他 Solr 组件的代码中看到的那样,在 Solr 中编写单元测试是通过扩展 SolrTestCaseJ4 来完成的。类(class)。不幸的是,SolrTestCaseJ4不处理分布式设置中的测试,我的自定义组件仅在这样的设置中工作。事实上,当不在分布式设置中时,我的组件会故意返回空响应。

我正在想办法使用 BaseDistributedSearchTestCase类来测试我的组件。 BaseDistributedSearchTestCase 的问题是它的工作方式无法解决我的问题。使用 BaseDistributedSearchTestCase 时您定义了一个测试方法,您可以在其中索引所有文档并执行一些查询。运行测试会在分布式设置和单个核心设置上执行请求。然后它比较每个设置的响应以验证它们是否相等。我无法在该流程中明确断言任何内容。

如何为 Solr 分布式组件编写单元测试?

最佳答案

在 Solr 4.7 中添加了一个类 MiniSolrCloudCluster,它实际上在本地“部署”(如果您只需要 ram 或在临时目录上)一个完整的 solr 集群,带有 zookeeper、分片和一切,用于您的测试。

你可以在这里找到jira:https://issues.apache.org/jira/browse/SOLR-5865

我已经成功地使用它对 solr 分布式组件进行了测试,以 Solr 测试为例,如下:

    private static MiniSolrCloudCluster miniCluster;    private static CloudSolrServer cloudSolrServer;    @BeforeClass    public static void setup() throws Exception {        miniCluster = new MiniSolrCloudCluster(2, null, new File("src/main/solr/solr.xml"), null, null);        uploadConfigToZk("src/main/solr/content/conf/", "content");        // override settings in the solrconfig include        System.setProperty("solr.tests.maxBufferedDocs", "100000");        System.setProperty("solr.tests.maxIndexingThreads", "-1");        System.setProperty("solr.tests.ramBufferSizeMB", "100");        // use non-test classes so RandomizedRunner isn't necessary        System.setProperty("solr.tests.mergeScheduler", "org.apache.lucene.index.ConcurrentMergeScheduler");        System.setProperty("solr.directoryFactory", "solr.RAMDirectoryFactory");                cloudSolrServer = new CloudSolrServer(miniCluster.getZkServer().getZkAddress(), false);        cloudSolrServer.setRequestWriter(new RequestWriter());        cloudSolrServer.setParser(new XMLResponseParser());        cloudSolrServer.setDefaultCollection("content");        cloudSolrServer.setParallelUpdates(false);        cloudSolrServer.connect();        createCollection(cloudSolrServer, "content", 2, 1, "content");    }    protected static void uploadConfigToZk(String configDir, String configName) throws Exception {        SolrZkClient zkClient = null;        try {            zkClient = new SolrZkClient(miniCluster.getZkServer().getZkAddress(), 10000, 45000, null);            uploadConfigFileToZk(zkClient, configName, "solrconfig.xml", new File(configDir, "solrconfig.xml"));            uploadConfigFileToZk(zkClient, configName, "schema.xml", new File(configDir, "schema.xml"));            uploadConfigFileToZk(zkClient, configName, "stopwords_en.txt", new File(configDir, "stopwords_en.txt"));            uploadConfigFileToZk(zkClient, configName, "stopwords_it.txt", new File(configDir, "stopwords_it.txt"));            System.out.println(zkClient.getChildren(ZkController.CONFIGS_ZKNODE + "/" + configName, null, true));        } finally {            if (zkClient != null)                zkClient.close();        }    }    protected static void uploadConfigFileToZk(SolrZkClient zkClient, String configName, String nameInZk, File file) throws Exception {        zkClient.makePath(ZkController.CONFIGS_ZKNODE + "/" + configName + "/" + nameInZk, file, false, true);    }    @AfterClass    public static void shutDown() throws Exception {        miniCluster.shutdown();    }    protected static NamedList createCollection(CloudSolrServer server, String name, int numShards, int replicationFactor, String configName) throws Exception {        ModifiableSolrParams modParams = new ModifiableSolrParams();        modParams.set(CoreAdminParams.ACTION, CollectionAction.CREATE.name());        modParams.set("name", name);        modParams.set("numShards", numShards);        modParams.set("replicationFactor", replicationFactor);        modParams.set("collection.configName", configName);        QueryRequest request = new QueryRequest(modParams);        request.setPath("/admin/collections");        return server.request(request);    }    @Test    public void test() throws Exception {      // Do you stuff here using cloudSolrServer as a normal solrServer    }

关于java - 测试 Solr 分布式组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25586021/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com