java-Spring数据Solr HttpSolrClient不使用实体的核心注释

配置如下

@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,则不需要!

上一篇:java-EmbeddedSolrServer的使用是否已过时且不建议使用?


下一篇:Apache Solr学习 第一篇 简介和安装环境准备