すべての CRUD 操作に SolrCrudRepository を使用しています。SolrCrudRepository の save() メソッドを呼び出すと、保存してコミットする必要がありますが、それは実行していません。SolrTemplate の commit() メソッドを使用して、ドキュメントを完全に保存 (保存とコミットなど) する必要があります。行を削除するsolrTemplateThree.getSolrServer().commit()
と、コミットされません。したがって、データをクエリできません (solr 管理ページからコアを直接リロードしてクエリを実行する必要があります)。考えられる原因についての指摘やコメントを歓迎します。
SolrCrudRepository 以外に、solr インデックスを保存/削除するために利用できる代替手段は何ですか?
@Service("solrDocumentService")
@Repository
public class SolrDocumentServiceImpl implements SolrDocumentService{
private static final Logger logger = LoggerFactory.getLogger(SolrDocumentServiceImpl.class);
@Autowired @Qualifier("solrTemplateThree")
private SolrTemplate solrTemplateThree;
@Override
public SolrDocument save(SolrDocument solrDoc) {
SolrDocument saved = solrDocumentRepository().save(solrDoc);
try {
solrTemplateThree.getSolrServer().commit();
} catch (SolrServerException e) {
logger.info(e.getMessage());
} catch (IOException e) {
logger.info(e.getMessage());
}
return saved;
}
private SolrDocumentRepository solrDocumentRepository(){
return new SolrRepositoryFactory(solrTemplateThree).getRepository(SolrDocumentRepository.class);
}
}
構成クラス
@Configuration
@EnableSolrRepositories("repository")
@ComponentScan(basePackages={"..."})
//@Profile("production")
@PropertySource("classpath:solr.properties")
public class HttpSolrConfig {
@Autowired
private Environment environment;
@Bean
public HttpSolrServerFactoryBean solrServerFactoryBeanAutocomplete() {
HttpSolrServerFactoryBean factory = new HttpSolrServerFactoryBean();
factory.setUrl(environment.getRequiredProperty("solr.server.core.three.url"));
return factory;
}
@Bean
public SolrTemplate solrTemplateThree() throws Exception {
return new SolrTemplate(solrServerFactoryBeanAutocomplete().getObject());
}
@Bean
public SolrTemplate solrTemplate() throws Exception {
return new SolrTemplate(solrServerFactoryBeanUsers().getObject());
}
}