首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用原始spring-data-solr在嵌入式solr上配置多个核?

如何使用原始spring-data-solr在嵌入式solr上配置多个核?
EN

Stack Overflow用户
提问于 2017-05-17 07:36:56
回答 1查看 750关注 0票数 0

我想在我的Solr 5.5.0嵌入式服务器环境中添加另一个核心。“在我的世界”,我创建了一个嵌入式服务器,让弹簧数据加载核心配置。但是通过我的解决方案,所有的数据似乎都进入了默认的核心"collection1“。到目前为止,除了弹簧靴,我找不到一个例子。但这不是一种选择。

到目前为止,我的配置如下所示:

代码语言:javascript
复制
@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;
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-17 08:01:42

我会这样做

代码语言:javascript
复制
@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,您可以这样做

代码语言:javascript
复制
@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);
  }
}  

如您所见,我正在根据某些属性集创建嵌入式some或standaloneclient。您可以根据配置文件(自动环境和检查配置文件)更改它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44018436

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档