java - Spring data solr HttpSolrClient 不使用来自实体的核心注释

标签 java spring solr spring-data spring-data-solr

配置如下

@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());
    }

并且为了注入(inject)你将有另一个:

    @Bean
    public SolrTemplate customTemplate() {
        return new SolrTemplate(solrClient(), "core1");
    }

显然,如果您不需要 multicoreSupport=true,则不需要!

关于java - Spring data solr HttpSolrClient 不使用来自实体的核心注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41723865/

相关文章:

java - 是否有一个基于 hibernate 构建的简单、可扩展的 CRUD 存储库?

java - JPA 应用程序在运行多个小时后不会从对 JPA 存储库的调用返回

json - Docker - 在 Solr 核心中导入 Json 文档

spring - Spring Data Elasticsearch 2.2.3.RELEASE如何配置Rest高级客户端的socket超时

java - Spring调度器多次执行任务

search - Solr:如何指定字段相关性/权重

java - 如何向 Lucene/Solr 相似性类添加新方法?

java - 如何用 xml 文件中的实际值替换变量,该文件位于 Maven 的另一个依赖项 jar 文件中

java - 如何让 jaxb 插件使用 OffsetDateTime

java - toLowerCase(Locale) 输出必须是什么?