В конце октября я посетил 3-дневный тренинг по Solr . Это было очень интересно, в свете предыдущего разговора об упругом поиске, который я посетил в середине года. Как старый поклонник Spring Data, когда я узнал, что Spring Data предлагает модуль Solr, я воспользовался возможностью попробовать его.
В этом случае мне хорошо известно, что уровень абстракции над Solr не означает, что мы можем легко изменить базовое хранилище данных: Solr спроектирован как инвертированный индекс, тогда как другие модули Spring Data гораздо более специализированы (JPA, MongoDB и т. Д.). .). Тем не менее, есть некоторые преимущества использования Spring Data по сравнению с Solr:
- Быстрое прототипирование, когда вам не нужны целые девять ярдов
- Используйте Solr, когда большая часть команды уже знает о Spring Data, а не Solr
- Пружина интеграции снизу
- Наконец, что не менее важно, вы можете легко переключаться между встроенным Solr и автономным. Spring Data прекрасно оборачивает как API-интерфейс Solrj, так и HTTP за собственный API. Если вы считаете, что это не уместный вариант использования, поскольку этого никогда не произойдет, подумайте об интеграционном тестировании
После инициализации Solr с соответствующими данными, вот шаги, которые вы должны пройти, чтобы начать разработку:
- Первым шагом является настройка контекста Spring с базовым Solr. Spring Data Solr требует bean-компонента с именем
solrTemplate
typeSolrOperations
. Давайте использовать JavaConfig для этого:@Configuration @EnableSolrRepositories("ch.frankel.blog.springdata.solr.repository") public class JavaConfig { @Bean protected HttpSolrServerFactoryBean solrServerFactory() { HttpSolrServerFactoryBean factory = new HttpSolrServerFactoryBean(); factory.setUrl("http://localhost:8983/solr"); return factory; } @Bean public SolrOperations solrTemplate() throws Exception { return new SolrTemplate(solrServerFactory().getObject()); } }
- Создайте управляемый объект. Все поля, хранящиеся в Solr, должны быть помечены
@Field
. Если имя атрибута сущности отличается от имени поля Solr,@Field
принимает значение для переопределения имени:public class Loan { @Field private String id; @Field("gov_type") private String governmentType; // Getters and setters }
- Создайте интерфейс репозитория: либо наследуйте от,
SolrRepository<Bean,ID>
либоSolrCrudRepository<Bean,ID>
. Обратите внимание, что первый предоставляет толькоcount()
метод.public interface LoanRepository extends SolrRepository<Loan, String> {}
- Добавьте методы запросов к прежнему интерфейсу:
- Простые методы запроса выгоды от Spring разборе данных:
List<Loan> findByLoanType(String)
переведет?q=loan_type:...
- Более сложные запросы (или метод, чье имя не соответствует шаблону) должны быть аннотированы
@Query
:@Query("state_name:[* TO *]")
найдут все кредиты, для которых есть значениеstate_name
. Аннотация может связать столько параметров, сколько необходимо, с помощью?x
где x — это индекс параметра в списке параметров метода.
- Фасеты также обрабатываются с помощью
@Facet
аннотации, которая принимает имена полей, которые должен использовать фасет. Тем не менее, это меняет сигнатуру метода на a,FacetPage
и это зависит от вызывающего метода (возможно, расположенного на уровне службы), чтобы справиться с этим.
Последний класс должен выглядеть примерно так, что замечательно, учитывая все его возможности:
public interface LoanRepository extends SolrRepository<Loan, String> { List<Loan> findByLoanType(String loan); List<Loan> findByTitleContaining(String title); @Query("state_name:[* TO *]") List<Loan> findLocalized(); @Query("*:*") @Facet(fields = "loan_type") FacetPage<Loan> findAllLoanTypes(Pageable page); }
Весь исходный код проекта доступен здесь в формате IntelliJ / Maven, в комплекте с тестами. Обратите внимание, что вам понадобится работающий экземпляр Solr с определенной схемой Solr и документами в ней. Предоставляются как схема, так и файлы документов (fede.xml), но они не автоматизированы: вам нужно перезаписать вашу схему и файл документа в работающий экземпляр (с помощью классической java -jar post.jar
командной строки).
Чтобы идти дальше:
- Документация Spring Data Solr
- Spring Data Solr JavaDocs
- Полноценные примеры кода
- Файл документа содержит ссылки на возможности получения займов от федерального правительства США. Он был изменен с исходного документа, который будет добавлен в Solr.