Я создаю приложение с помощью загрузки Spring и хочу запрашивать и добавлять документы в Solr. Поэтому я использую Spring data solr для этого, зависимость maven:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-solr</artifactId>
</dependency>
Затем я создаю класс конфигурации для конфигурации репозитория Solr. Благодаря Spring все просто и работает отлично.
@Configuration
@EnableSolrRepositories(basePackages = { "xxx.xx.xx.resource.repository.solr" },multicoreSupport = true)
public class SolrConfiguration {
@Bean
public SolrClient solrClient(@Value("${solr.host}") String solrHost) {
return new HttpSolrClient(solrHost);
}
}
Затем я хочу добавить пользовательскую функцию для сохранения документов, поскольку преобразователь по умолчанию не может преобразовать мой вложенный объект Java. Я намерен использовать bean-компонент SolrClient
или bean-компонент SolrTemplate для сохранения.
public class HouseSolrRepositoryImpl extends SimpleSolrRepository<House, String> implements HouseSolrRepository{
@Autowired
private SolrClient solrClient;
@Override
public House save(House house) throw Exception{
// Do converting
solrClient.save(doc);
solrClient.commit();
return house;/
}
}
Но путь автосвязывания SolrClient
не получает solrCoreName
пути от объекта документа (@Document(solrCoreName = "gettingstarted")
). Это просто запрос к http://localhost:8983/solr
, а не http://localhost:8983/solr/gettingstarted
с именем ядра.
Я предполагаю, что solrCoreName
будет установлен во время инициализации bean-компонентов репозитория, поэтому моя конфигурация не будет его содержать.
С другой стороны, я обнаружил, что bean-компонент SolrOperation
из SimpleSolrRepository
также становится нулевым, и все другие запросы, такие как findOne()
, не могут работать должным образом.