我有一个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)`
答案 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 代码库的许多测试。