Spring data solr HttpSolrClient 不使用来自实体的核心注释
Spring data solr HttpSolrClient does not use core annotation from entity
配置如下
@Configuration
@EnableSolrRepositories(basePackages={"com.foo"}, multicoreSupport=true)
public class SolrConfig {
@Value("${solr.host}") String solrHost;
@Bean
public SolrClient solrClient() {
return new HttpSolrClient(solrHost);
}
@Bean
public SolrTemplate solrTemplate() {
return new SolrTemplate(solrClient());
}
}
我有一个简单的实体:
@SolrDocument(solrCoreName = "core1")
public class MyEntity implements Serializable {
如果使用 SolrTemplate 执行查询,它不会在文档上使用 coreName 注释:
Page results = solrTemplate.queryForPage(search, MyEntity.class);
我遇到异常:
org.springframework.data.solr.UncategorizedSolrException: Error from server at http://localhost:8983/solr: Expected mime type application/octet-stream but got text/html.
[..]
Problem accessing /solr/select
[...]
<title>Error 404 Not Found</title>
将 SolrTemplate bean 更改为:
@Bean
public SolrTemplate solrTemplate() {
return new SolrTemplate(solrClient(), "core1");
}
有效
spring-data 的人确认这是预期的行为,模板不会从实体注释中读取核心。
所以在 multicoreSupport=true
环境中,如果你想同时使用存储库和模板,你必须创建 2 个 bean:
对于存储库,基本模板:
@Bean
public SolrTemplate solrTemplate() {
return new SolrTemplate(solrClient());
}
为了注射,您将有另一个:
@Bean
public SolrTemplate customTemplate() {
return new SolrTemplate(solrClient(), "core1");
}
显然如果你不需要 multicoreSupport=true
none 是需要的!
配置如下
@Configuration
@EnableSolrRepositories(basePackages={"com.foo"}, multicoreSupport=true)
public class SolrConfig {
@Value("${solr.host}") String solrHost;
@Bean
public SolrClient solrClient() {
return new HttpSolrClient(solrHost);
}
@Bean
public SolrTemplate solrTemplate() {
return new SolrTemplate(solrClient());
}
}
我有一个简单的实体:
@SolrDocument(solrCoreName = "core1")
public class MyEntity implements Serializable {
如果使用 SolrTemplate 执行查询,它不会在文档上使用 coreName 注释:
Page results = solrTemplate.queryForPage(search, MyEntity.class);
我遇到异常:
org.springframework.data.solr.UncategorizedSolrException: Error from server at http://localhost:8983/solr: Expected mime type application/octet-stream but got text/html.
[..]
Problem accessing /solr/select
[...]
<title>Error 404 Not Found</title>
将 SolrTemplate bean 更改为:
@Bean
public SolrTemplate solrTemplate() {
return new SolrTemplate(solrClient(), "core1");
}
有效
spring-data 的人确认这是预期的行为,模板不会从实体注释中读取核心。
所以在 multicoreSupport=true
环境中,如果你想同时使用存储库和模板,你必须创建 2 个 bean:
对于存储库,基本模板:
@Bean
public SolrTemplate solrTemplate() {
return new SolrTemplate(solrClient());
}
为了注射,您将有另一个:
@Bean
public SolrTemplate customTemplate() {
return new SolrTemplate(solrClient(), "core1");
}
显然如果你不需要 multicoreSupport=true
none 是需要的!