在Spring data solr 3.0.6发行版中,动态选择solr core

时间:2018-04-23 09:29:36

标签: spring solr spring-data-jpa solrj spring-data-solr

我正在使用spring data solr 3.0.6和独立的solr服务器7.0.0,我的solr服务器中有多个solr核心,我想动态选择其中一个,这是我有的配置

@Configuration
@EnableSolrRepositories(basePackages = "com.solr.repository")
public class SolrConfiguration
{


 @Bean
  public SolrOperations solrTemplate(SolrClient solr) {
    return new SolrTemplate(solr);
  }



  @Bean(name = "solrClient")
  public SolrClient createSolrClient()
  {
     HttpSolrClient.Builder builder = new HttpSolrClient.Builder().withBaseSolrUrl(solrInstanceUrl);
    return builder.build();
}

}

SolrRepository

public interface SolrRepository extends SolrCrudRepository<SolrDocument, Integer>
{
 @Query("name:*?0* OR content:*?0*")
 @Highlight()
  public HighlightPage<SolrDocument> findByQueryAnnotation(String searchTerm, Pageable pageable);
}

SolrDocument(Solr存储库的域类)

@SolrDocument
public class SolrDocument
{
}

ServicePojo(服务类)

 public class ServicePojo
    {
        @Autowired
        SolrRepository solrRepository;

        public void findData(int id)
        {
           solrRepository.findById(id);
         }
    }

现在我想使用像findById()等存储库接口的方法,但正如我上面提到的,我有不同的内核,我想在调用方法solrRepository.findById之前指出一个特定的内核来执行搜索(我需要提一下它应该指出哪个核心。那么我们可以告诉solr服务器,使用哪个Core?

如果我使用注释@SolrDocument(collectionName="core1"),那么它工作正常并指向“core1”,但我希望它是动态的。请帮忙

1 个答案:

答案 0 :(得分:0)

您无法使用存储库(SolrRepository)执行此操作。但您可以使用SolrTemplate执行此操作。

Here是3.0.6 SolrTemplate API的链接。如果你看一些像query或getById这样的方法,它需要一个参数collectionName。你可以在这里传递coreName。