使用JavaConfig的Spring Data Solr存储库

时间:2016-11-23 17:05:54

标签: java spring maven solr

我正在尝试创建一个使用solr存储库的SpringBoot应用程序。我正在学习本教程:

  

http://docs.spring.io/spring-data/solr/docs/current/reference/html/#solr.repositories

表示使用以下类配置我的应用程序(例43):

@Configuration
@EnableSolrRepositories
class ApplicationConfig {

  @Bean
  public SolrClient solrClient() {
    EmbeddedSolrServerFactory factory = new EmbeddedSolrServerFactory("classpath:com/acme/solr");
    return factory.getSolrServer(); // getSolrServer does not exist
  }

  @Bean
  public SolrOperations solrTemplate() {
    return new SolrTemplate(solrClient());
  }
}

问题是,如果我这样做,它就不会将getSolrServer()识别为factory的方法。实际上,如果你看EmbeddedSolrServerFactory getSolrServer getSolrClient,你找不到那种方法,但它显然存在于同一类的most recent API中。

由于某种原因,可能会从<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-solr</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> 重命名为getSolrServer,从一个版本更改为另一个版本。

这是我在pom.xml中的依赖项

getSolrClient

无论如何,我尝试将SolrClient更改为org.apache.solr.client.solrj.embedded.EmbeddedSolrServer,但返回类型(即org.apache.solr.client.solrj.embedded)现在不兼容。如果我尝试返回SolrTemplate,则会给我一个错误,因为它找不到EmbeddedSolrServer ...

使用此问题的另一个问题是var homeObjects = ["Kitchen", "Bathroom", "Decorating","DIY","Garden","Homeware","Lighting","Christmas"]; var i; for(i=0;i<homeObjects.length;i++) { $('#department_categories h4:contains('+homeObjects[i]+'])').parent().css('background-image', 'url("some-image.jpg'); } 不需要{{1}},所以这不是一个好的选择......

2 个答案:

答案 0 :(得分:0)

我使用的是eclipse而不是spring套件,假设弹簧套件使用最新版本的spring-boot-starter-data-solr ( 1.4.2 ),你需要在你的pom中为solr-core 5.x添加一个条目。

由于EmbeddedSolrServer正在扩展SolrClient,因此遵循Java IS-A关系,它应该与SolrClient兼容。这个二进制文件是solr-core的一部分。

您的代码需要使用getSolrClient本身,并且应与SolrClient

兼容
  

pom.xml中的依赖关系如下

enter image description here

  

这里我们使用我们的代码库而没有任何错误。

enter image description here

答案 1 :(得分:0)

创建EmbeddedSolrServerFactoryBean对象并将该对象传递给solr模板以创建SolrTemplate对象,而不是创建SolrClient bean。这是我的配置文件:

@Configuration
@EnableSolrRepositories(basePackages = "com.ida.*.repository")
@Profile("dev")
public class SolrConfigDev {
    @Autowired
    private Environment environment;

    @Bean
    public EmbeddedSolrServerFactoryBean solrServerFactoryBean() {
        EmbeddedSolrServerFactoryBean factory = new EmbeddedSolrServerFactoryBean();

        factory.setSolrHome(environment.getRequiredProperty("solr.solr.home"));

        return factory;
    }

    @Bean
    public SolrTemplate solrTemplate() throws Exception {
        return new SolrTemplate(solrServerFactoryBean().getObject());
    }
}

此外,您必须将solr-core添加到pom.xml文件中。

<dependency>
    <groupId>org.apache.solr</groupId>
    <artifactId>solr-core</artifactId>
    <version>5.5.3</version>
</dependency>

有关此主题的更多信息,您可以在Petri Kainulainen的博客中找到here