我正在使用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”,但我希望它是动态的。请帮忙
答案 0 :(得分:0)
您无法使用存储库(SolrRepository
)执行此操作。但您可以使用SolrTemplate
执行此操作。
Here是3.0.6 SolrTemplate
API的链接。如果你看一些像query或getById这样的方法,它需要一个参数collectionName。你可以在这里传递coreName。