gpt4 book ai didi

java - 注入(inject)的 SolrTemplate 资源未连接到 HttpSolrServer

转载 作者:太空宇宙 更新时间:2023-11-04 13:46:10 27 4
gpt4 key购买 nike

我正在使用带有自定义存储库功能的 Spring data Solr 1.4 来尝试按照本文实现计数函数:link

我正在使用配置为使用多个核心的 Solr。我的常规存储库接口(interface)获取并使用正确的 SolrTemplateSolrServer 实例,但自定义存储库未获取相同的模板实例。除了使用 @Resource 来注入(inject) bean 之外,我还尝试获取 spring 应用程序上下文并从中提取 bean。在这两种情况下,我都得到一个 solrServer bean 引用,它不知道我的核心是什么,因此当它尝试到达 solr 时查询会失败: http://localhost:8983/solr而不是http://localhost:8983/solr/myCore

bean 定义如下所示:

@Bean
@Scope(value=ConfigurableBeanFactory.SCOPE_SINGLETON)
public SolrServer solrServer() {
SolrServer server = new HttpSolrServer(solrServerUrl);
return server;
}

@Bean(name = "solrTemplate")
@Scope(value=ConfigurableBeanFactory.SCOPE_SINGLETON)
public SolrTemplate solrTemplate(SolrServer server) throws Exception {
SolrTemplate template = new SolrTemplate(server);
template.setSolrCore(mainCore);
return template;
}

我的测试如下所示:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = SearchEngineApplication.class, loader=SpringApplicationContextLoader.class)

public class MainRepositoryTest {

@Autowired
private MainRepository mainRepository;
...
@Test
public void testCountResults(){
long count= citcMainRepository.count("red");
System.out.println("Found " + count + " results for the term red" );
assertTrue(count > 0);
}
}

测试总是失败:

<body><h2>HTTP ERROR 404</h2>
<p>Problem accessing /solr/select

当它应该到达的正确网址是 /solr/select/myCore

关于我在这里可能配置错误的内容有什么建议吗?任何/所有回复表示赞赏!

--格里夫

最佳答案

通过创建第二个相同类型的 bean 并向其添加限定符,我自己解决了该问题。

在我的 SolrContext 中,我定义了 bean 工厂和 bean 定义,如下所示: @ bean 公共(public) SolrServerFactory solrServerFactory() { 返回新的 MulticoreSolrServerFactory(new HttpSolrServer(solrServerUrl)); }

// SolrTemplate for /solrServerUrl/mainCore
@Bean(name = "mainTemplate")
public SolrTemplate mainTemplate() throws Exception {
SolrTemplate solrTemplate = new SolrTemplate(solrServerFactory());
solrTemplate.setSolrCore(mainCore);
return solrTemplate;
}

@Bean(name="mainRepo")
public MainRepository mainRepository() throws Exception {
return new SolrRepositoryFactory(mainTemplate())
.getRepository(CITCMainRepository.class,
new MainRepositoryImpl(mainTemplate()));
}

然后通过在我的单元测试中限定存储库:

公共(public)类 CITCMainRepositoryTest {

@Autowired
@Qualifier(value="mainRepo")
private MainRepository mainRepository;

@Test
public void testFindByLastName() {
List<SearchResponse> searchItems= mainRepository.findByLastName("Hunt");
assertTrue(searchItems.size() > 0);
}
...

}

希望这对其他人有帮助。

--格里夫

关于java - 注入(inject)的 SolrTemplate 资源未连接到 HttpSolrServer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30819770/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com