我遇到了将我的solr配置从1.5.4升级到3.0.0.M4(以及Spring Boot更新到2.0.0.M2)的问题。
上一个配置文件(spring-data-solr 1.5.4.RELEASE):
@Configuration
@EnableSolrRepositories(value = "com.bar.foo.repository.solr", multicoreSupport = true)
public class SolrConfiguration implements EnvironmentAware{
private RelaxedPropertyResolver propertyResolver;
private Environment environment;
@Override
public void setEnvironment(Environment environment) {
this.environment = environment;
this.propertyResolver = new RelaxedPropertyResolver(environment, "spring.data.solr.");
}
@Bean
public SolrServer solrServer() {
String solrHost = propertyResolver.getProperty("host");
return new HttpSolrServer(solrHost);
}
@Bean(name = "core1SolrTemplate")
public SolrOperations core1SolrTemplate() {
HttpSolrServer httpSolrServer = new HttpSolrServer(propertyResolver.getProperty("host"));
return new SolrTemplate(httpSolrServer, "Core1");
}
@Bean(name = "core2SolrTemplate")
public SolrOperations core2SolrTemplate() {
HttpSolrServer httpSolrServer = new HttpSolrServer(propertyResolver.getProperty("host"));
return new SolrTemplate(httpSolrServer, "Core2");
}
...
}
然后我们在代码中使用这些solrtemplate作为
@Resource SolrTemplate core1SolrTemplate;
@Resource SolrTemplate core2SolrTemplate;
尝试更新,我看到HttpSolrServer不再可用,我们应该使用SolrClient,但是随着multicoreSupport的删除以及声明模板核心的能力,我不知道如何为每个核心创建一个模板(或者一个能够检测哪个核心要查询的?)
这是我当前的非工作配置:
@Configuration
@EnableSolrRepositories(value = "com.bar.foo.repository.solr")
public class SolrConfiguration {
@Inject
private Environment environment;
@Bean
public SolrClient solrClient() {
return new HttpSolrClient.Builder(environment.getProperty("spring.data.solr.host")).build();
}
@Bean
public SolrTemplate solrTemplate() {
return new SolrTemplate(solrClient());
}
}
我们的Pojos配置为:
@SolrDocument(solrCoreName = "Core1")
public class Foo{
@Id
private String id;
...
}
和抛出错误的电话
core1SolrTemplate.queryForPage(simpleQuery, Foo.class)
“引起:org.apache.solr.client.solrj.impl.HttpSolrClient $ RemoteSolrException:来自http://192.168.99.100:8983/solr的服务器的错误:预期的mime类型application / octet-stream但是得到了text / html。”
看起来solrtemplate只是在没有选择任何核心的情况下调用baseurl。
我也尝试过像以前一样创建多个SolrTemplate并将参数传递给solrClient()以构建每个核心的特定URL,但是没有成功使它工作(我有错误,其中第二个模板显然使用了第一个solrtemplate bean,指向错误的核心。)
如何配置Solr以查询多个内核?
Current(2.1.4)solr doc: http://docs.spring.io/spring-data/data-solr/docs/current/reference/html/#solr.multicore
3.0.0.M4文档中未描述多核: http://docs.spring.io/spring-data/data-solr/docs/3.0.0.M4/reference/html/#solr.multicore
答案 0 :(得分:0)
我认为您需要将@SolrDocument注释添加到您的pojos以使用多核支持。请参阅下面的问题进行讨论取决于你如何设置它。
答案 1 :(得分:0)
看起来我累了,以下配置似乎工作正常 - 随时随地改进
@Configuration
@EnableSolrRepositories(basePackages={"com.example.demo.repository"})
public class SolrContext {
static final String SOLR_HOST = "solr.host";
@Autowired
private Environment environment;
@Bean
public SolrClient solrClient() {
return new HttpSolrClient.Builder(environment.getProperty(SOLR_HOST)).build();
}
@Bean
public SolrTemplate solrTemplate() {
return new SolrTemplate(solrClient());
}
@Bean
public SolrTemplate core1Template() {
return new SolrTemplate(new HttpSolrClient.Builder(environment.getProperty(SOLR_HOST)+"/core1").build());
}
@Bean
public SolrTemplate core2Template() {
return new SolrTemplate(new HttpSolrClient.Builder(environment.getProperty(SOLR_HOST)+"/core2").build());
}
}