我正在尝试创建一个使用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}},所以这不是一个好的选择......
答案 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中的依赖关系如下
这里我们使用我们的代码库而没有任何错误。
答案 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。