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

时间:2016-03-16 15:23:57

标签: solr spring-boot spring-data-solr

我有一个spring boot应用程序,我在其中嵌入了一个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())
    }

}
尝试就像你说的那样,仍然没有好处,我把我的核心“课程查找器”命名为,并像你说的那样传递它,但它仍在寻找colelction1:

@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)`

3 个答案:

答案 0 :(得分:0)

return factory.getSolrServer()更改为return factory.getSolrServer("yourcorename")

答案 1 :(得分:0)

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

请注意,home文件夹下面有一个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;
}

答案 2 :(得分:0)

不确定如何使用 Spring Boot 执行此操作,但我编写了一个示例,该示例有助于为每个测试目的加载多个 EmbeddedSolrServer 实例。

Infact EmbeddedSolrServer 广泛用于 Solr 代码库的许多测试。

https://github.com/freedev/EmbeddedSolrServer-junit-example