如何使用原始 spring-data-solr 在嵌入式 solr 上配置多个内核
How do i configure multiple cores on embedded solr with raw spring-data-solr
我想为我的 Solr 5.5.0 嵌入式服务器环境添加另一个核心。
"In my world" 我创建了一个嵌入式服务器并让 spring-data 加载核心配置。但是在我的解决方案中,似乎所有数据都进入了默认核心 "collection1"。到目前为止,我找不到 spring-boot 旁边的示例。但这不是一个选择。
到目前为止,我的配置如下所示:
@Import({
AppctxSolrEmbedded.class,
AppctxSolrHttp.class
})
@EnableSolrRepositories(value = "de.my.application.*.repository", multicoreSupport = true)
@Configuration
public class AppctxSolr {
public @Bean SolrTemplate solrTemplate(
@Named("solrClient") SolrClient solrClient) {
return new SolrTemplate(solrClient, "collection1");
}
public @Bean SolrTemplate operatorSolrTemplate(
@Named("solrClient") SolrClient solrClient) {
return new SolrTemplate(solrClient, "operator1");
}
}
@Dev @Qual @RemoteDev
@Configuration
public class AppctxSolrEmbedded {
@Bean
public EmbeddedSolrServerFactoryBean solrClient(
@Value("${solr.server}") String solrHome) {
EmbeddedSolrServerFactoryBean factory = new EmbeddedSolrServerFactoryBean();
factory.setSolrHome(solrHome);
return factory;
}
}
@Prod
@Configuration
public class AppctxSolrHttp {
@Bean
public HttpSolrClientFactoryBean solrClient(
@Value("${solr.server}") String baseURL) {
HttpSolrClientFactoryBean factory = new HttpSolrClientFactoryBean();
factory.setUrl(baseURL);
return factory;
}
}
这是我的做法
@Configuration
@EnableSolrRepositories(multicoreSupport = true)
public class MulticoreSolrConfiguration {
@Autowired
private SolrClient solrClient;
@Bean
public SolrOperations solrTemplate() throws ParserConfigurationException, SAXException, IOException {
return new SolrTemplate(this.solrClient);
}
@Bean
public MulticoreSolrClientFactory multicoreSolrClientFactory()
throws ParserConfigurationException, SAXException, IOException {
return new MulticoreSolrClientFactory(this.solrClient, "operator1", "collection1");
}
@Bean(name = "operatorSolrClient")
public SolrClient operatorSolrClient() throws IOException, SAXException, ParserConfigurationException {
return this.multicoreSolrClientFactory().getSolrClient("operator1");
}
@Bean(name = "operatorSolrTemplate")
public SolrTemplate operatorSolrTemplate() throws IOException, SAXException, ParserConfigurationException {
return new SolrTemplate(this.operatorSolrClient());
}
}
@Bean(name = "collectionSolrClient")
public SolrClient collectionSolrClient() throws IOException, SAXException, ParserConfigurationException {
return this.multicoreSolrClientFactory().getSolrClient("collection1");
}
@Bean(name = "collectionSolrTemplate")
public SolrTemplate collectionSolrTemplate() throws IOException, SAXException, ParserConfigurationException {
return new SolrTemplate(this.collectionSolrClient());
}
}
然后您可以像这样代替 AppctxSolrEmbedded 和 AppctxSolrHttp
@Configuration
class SolrConfiguration {
private final SolrProperties solrProperties; // Has details about solr host, port, directory .....
@Autowired
public SolrConfiguration(final SolrProperties solrProperties) {
this.solrProperties = solrProperties;
}
@Bean
SolrClient solrClient() {
final SolrClient solrClient;
if (this.solrProperties.isEmbedded()) {
solrClient = createEmbeddedSolrClient();
} else {
solrClient = createStandaloneSolrClient();
}
return solrClient;
}
private SolrClient createEmbeddedSolrClient() {
final String solrConfigurationFolder = this.solrProperties.getSolr().getHome();
final EmbeddedSolrServerFactoryBean factoryBean = new EmbeddedSolrServerFactoryBean();
factoryBean.setSolrHome(solrConfigurationFolder);
return factoryBean.getSolrClient();
}
private SolrClient createStandaloneSolrClient() {
final String solrUrl = this.solrProperties.getHost();
return new HttpSolrClient(solrUrl);
}
}
如您所见,我正在根据某些属性集创建 embeddedsolrclient 或 standaloneclient。您可以将其更改为基于配置文件(Autowire 环境并检查配置文件)
我想为我的 Solr 5.5.0 嵌入式服务器环境添加另一个核心。 "In my world" 我创建了一个嵌入式服务器并让 spring-data 加载核心配置。但是在我的解决方案中,似乎所有数据都进入了默认核心 "collection1"。到目前为止,我找不到 spring-boot 旁边的示例。但这不是一个选择。
到目前为止,我的配置如下所示:
@Import({
AppctxSolrEmbedded.class,
AppctxSolrHttp.class
})
@EnableSolrRepositories(value = "de.my.application.*.repository", multicoreSupport = true)
@Configuration
public class AppctxSolr {
public @Bean SolrTemplate solrTemplate(
@Named("solrClient") SolrClient solrClient) {
return new SolrTemplate(solrClient, "collection1");
}
public @Bean SolrTemplate operatorSolrTemplate(
@Named("solrClient") SolrClient solrClient) {
return new SolrTemplate(solrClient, "operator1");
}
}
@Dev @Qual @RemoteDev
@Configuration
public class AppctxSolrEmbedded {
@Bean
public EmbeddedSolrServerFactoryBean solrClient(
@Value("${solr.server}") String solrHome) {
EmbeddedSolrServerFactoryBean factory = new EmbeddedSolrServerFactoryBean();
factory.setSolrHome(solrHome);
return factory;
}
}
@Prod
@Configuration
public class AppctxSolrHttp {
@Bean
public HttpSolrClientFactoryBean solrClient(
@Value("${solr.server}") String baseURL) {
HttpSolrClientFactoryBean factory = new HttpSolrClientFactoryBean();
factory.setUrl(baseURL);
return factory;
}
}
这是我的做法
@Configuration
@EnableSolrRepositories(multicoreSupport = true)
public class MulticoreSolrConfiguration {
@Autowired
private SolrClient solrClient;
@Bean
public SolrOperations solrTemplate() throws ParserConfigurationException, SAXException, IOException {
return new SolrTemplate(this.solrClient);
}
@Bean
public MulticoreSolrClientFactory multicoreSolrClientFactory()
throws ParserConfigurationException, SAXException, IOException {
return new MulticoreSolrClientFactory(this.solrClient, "operator1", "collection1");
}
@Bean(name = "operatorSolrClient")
public SolrClient operatorSolrClient() throws IOException, SAXException, ParserConfigurationException {
return this.multicoreSolrClientFactory().getSolrClient("operator1");
}
@Bean(name = "operatorSolrTemplate")
public SolrTemplate operatorSolrTemplate() throws IOException, SAXException, ParserConfigurationException {
return new SolrTemplate(this.operatorSolrClient());
}
}
@Bean(name = "collectionSolrClient")
public SolrClient collectionSolrClient() throws IOException, SAXException, ParserConfigurationException {
return this.multicoreSolrClientFactory().getSolrClient("collection1");
}
@Bean(name = "collectionSolrTemplate")
public SolrTemplate collectionSolrTemplate() throws IOException, SAXException, ParserConfigurationException {
return new SolrTemplate(this.collectionSolrClient());
}
}
然后您可以像这样代替 AppctxSolrEmbedded 和 AppctxSolrHttp
@Configuration
class SolrConfiguration {
private final SolrProperties solrProperties; // Has details about solr host, port, directory .....
@Autowired
public SolrConfiguration(final SolrProperties solrProperties) {
this.solrProperties = solrProperties;
}
@Bean
SolrClient solrClient() {
final SolrClient solrClient;
if (this.solrProperties.isEmbedded()) {
solrClient = createEmbeddedSolrClient();
} else {
solrClient = createStandaloneSolrClient();
}
return solrClient;
}
private SolrClient createEmbeddedSolrClient() {
final String solrConfigurationFolder = this.solrProperties.getSolr().getHome();
final EmbeddedSolrServerFactoryBean factoryBean = new EmbeddedSolrServerFactoryBean();
factoryBean.setSolrHome(solrConfigurationFolder);
return factoryBean.getSolrClient();
}
private SolrClient createStandaloneSolrClient() {
final String solrUrl = this.solrProperties.getHost();
return new HttpSolrClient(solrUrl);
}
}
如您所见,我正在根据某些属性集创建 embeddedsolrclient 或 standaloneclient。您可以将其更改为基于配置文件(Autowire 环境并检查配置文件)