Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 嵌入式Solr服务器-如何使用不同的核心名称_Java_Spring Boot_Solr_Spring Data Solr - Fatal编程技术网

Java 嵌入式Solr服务器-如何使用不同的核心名称

Java 嵌入式Solr服务器-如何使用不同的核心名称,java,spring-boot,solr,spring-data-solr,Java,Spring Boot,Solr,Spring Data Solr,我有一个SpringBoot应用程序,其中嵌入了一个solr服务器。我现在似乎被迫将我的solr核心命名为“collection1”,这样我的代码就确实找到了要加载的核心 有人知道我怎么能武断吗 @Configuration @EnableSolrRepositories(basePackages = ["uk.xxx"], multicoreSupport = true) class SolrContext { static final String SOLR_HOST = 'sol

我有一个SpringBoot应用程序,其中嵌入了一个solr服务器。我现在似乎被迫将我的solr核心命名为“collection1”,这样我的代码就确实找到了要加载的核心

有人知道我怎么能武断吗

@Configuration
@EnableSolrRepositories(basePackages = ["uk.xxx"], multicoreSupport = true)
class SolrContext {

    static final String SOLR_HOST = 'solr.host'
    static final String SOLR_EMBEDDED_PATH = 'solr.embedded.path'


    @Resource
    Environment environment

    @Bean
    public SolrServer solrServer() {
        EmbeddedSolrServerFactory factory = new EmbeddedSolrServerFactory(environment.getRequiredProperty(SOLR_EMBEDDED_PATH))
        return factory.getSolrServer()
    }

    @Bean
    public SolrOperations solrTemplate() {
        return new SolrTemplate(solrServer())
    }

}

像你说的那样试过,还是不好,我把我的核心命名为“coursefinder”,并像你说的那样通过了,但它仍然在寻找collection1:

@Bean
public SolrServer solrServer() {
        println "starting embedded solr index"
        EmbeddedSolrServerFactory factory = new EmbeddedSolrServerFactory(grailsApplication.config.getProperty('solr.embedded.path'))
        return factory.getSolrServer("coursefinder")

    }
}
输出

starting embedded solr index
ERROR org.apache.solr.core.CoreContainer - Error creating core [collection1]: Could not load conf for core collection1: Error loading solr config from /Developer/dev/LSE/coursefinder-grails-angular/embeddedsolr/collection1/conf/solrconfig.xml
org.apache.solr.common.SolrException: Could not load conf for core collection1: Error loading solr config from /Developer/dev/LSE/coursefinder-grails-angular/embeddedsolr/collection1/conf/solrconfig.xml
    at org.apache.solr.core.ConfigSetService.getConfig(ConfigSetService.java:66)
    at org.apache.solr.core.CoreContainer.create(CoreContainer.java:489)
    at org.apache.solr.core.CoreContainer$1.call(CoreContainer.java:255)
    at org.apache.solr.core.CoreContainer$1.call(CoreContainer.java:249)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)`

return factory.getSolrServer()
更改为
return factory.getSolrServer(“您的CoreName”)

我尝试了所有发布的解决方案,唯一对solr 5.x有效的是以下内容

请注意,您的主文件夹下有一个core.properties,其中包含相同的名称

最好的方法是使用solr create构建一个核心,并将该结构用作主文件夹

以下是基于Spring的jUnit测试

@Bean
public EmbeddedSolrServer solrServerFactoryBean() {
    String folder = "src/main/resources/server/solr/";
    CoreContainer container = new CoreContainer(folder);
    container.load();
    return new EmbeddedSolrServer(container, "myName");

}

@Bean
public SolrTemplate solrTemplate(EmbeddedSolrServer server) throws Exception {
    SolrTemplate solrTemplate = new SolrTemplate(server);
    return solrTemplate;
}

我不知道如何使用SpringBoot实现这一点,但我编写了一个示例,帮助加载每个测试目的的多个实例

事实上,它被广泛应用于Solr代码库的许多测试中


您是如何创建核心的?您可以在创建core时将其名称设置为任何您想要的名称。我在examples目录中复制了collection1 core,然后将其重命名。我还更改了core.properties文件中的名称。然而,EmbeddedSolrServerFactory似乎在默认情况下查找“collection1”,即服务器保持在collection1,但不工作