Рубрики
Без рубрики

Введение в Spring Data Solr

Изучите основы использования Spring Data Solr, который интегрирует данные Spring с популярной поисковой системой Solr.

Автор оригинала: baeldung.

1. Обзор

В этой статье мы рассмотрим основы Spring Data Solr на практике.

Apache Solr-это готовая к развертыванию корпоративная полнотекстовая поисковая система с открытым исходным кодом. Вы можете узнать больше об особенностях Solr на официальном сайте .

Мы покажем, как сделать простую конфигурацию Solr и, конечно, как взаимодействовать с сервером.

Во-первых, нам нужно запустить сервер Solr и создать ядро для хранения данных (которое по умолчанию Solr создаст в режиме без схем).

2. Весенние данные

Как и любой другой проект Spring Data, Spring Data Solr имеет четкую цель удалить шаблонные коды, которыми мы обязательно воспользуемся.

2.1. Зависимость Maven

Давайте начнем с добавления зависимости Spring Data Solr в ваш pom.xml :


    org.springframework.data
    spring-data-solr
    2.0.5.RELEASE

Вы можете найти последние зависимости здесь .

2.2. Определение документа

Давайте определим документ под названием Product :

@SolrDocument(solrCoreName = "product")
public class Product {
   
    @Id
    @Indexed(name = "id", type = "string")
    private String id;

    @Indexed(name = "name", type = "string")
    private String name;

}

@SolrDocument аннотация указывает, что класс Product является документом Solr и индексируется в ядро с именем product . Поля, аннотированные @Indexed , индексируются в Solr и будут доступны для поиска.

2.3. Определение интерфейса репозитория

Затем нам нужно создать интерфейс репозитория, расширив репозиторий, предоставляемый Spring Data Solr. Мы, естественно, параметризуем это с помощью Product и Strong в качестве идентификатора нашей сущности:

public interface ProductRepository extends SolrCrudRepository {

    public List findByName(String name);

    @Query("id:*?0* OR name:*?0*")
    public Page findByCustomQuery(String searchTerm, Pageable pageable);

    @Query(name = "Product.findByNamedQuery")
    public Page findByNamedQuery(String searchTerm, Pageable pageable);

}

Обратите внимание, как мы определяем здесь три метода, поверх API, предоставленного SolrCrudRepository . Мы поговорим об этом в следующих нескольких разделах.

Также обратите внимание, что свойство Product.findByNamedQuery определено в файле именованных запросов Solr solr-named-queries.properties в папке classpath:

Product.findByNamedQuery=id:*?0* OR name:*?0*

2.4. Конфигурация Java

Теперь мы рассмотрим весеннюю конфигурацию слоя персистентности Solr:

@Configuration
@EnableSolrRepositories(
  basePackages = "com.baeldung.spring.data.solr.repository",
  namedQueriesLocation = "classpath:solr-named-queries.properties",
  multicoreSupport = true)
@ComponentScan
public class SolrConfig {

    @Bean
    public SolrClient solrClient() {
        return new HttpSolrClient("http://localhost:8983/solr");
    }

    @Bean
    public SolrTemplate solrTemplate(SolrClient client) throws Exception {
        return new SolrTemplate(client);
    }
}

Мы используем @EnableSolrRepositories для сканирования пакетов на наличие репозиториев. Обратите внимание, что мы указали расположение файла свойств именованного запроса и включили многоядерную поддержку.

Если многоядерность не включена, то по умолчанию Spring Data будет предполагать, что конфигурация Solr предназначена для одного ядра. Мы включаем многоядерный здесь, просто для справки.

3. Индексирование, обновление и Удаление

Для поиска документов в Solr документы должны быть проиндексированы в хранилище Solr.

Следующий пример индексирует документ продукта в репозитории Solr просто с помощью метода Solrcrudrepository save:

Product phone = new Product();
phone.setId("P0001");
phone.setName("Phone");
productRepository.save(phone);

Теперь давайте извлекем и обновим документ:

Product retrievedProduct = productRepository.findOne("P0001");
retrievedProduct.setName("Smart Phone");
productRepository.save(retrievedProduct);

Документы можно удалить, просто вызвав метод удаления:

productRepository.delete(retrievedProduct);

4. Запрос

Теперь давайте рассмотрим различные методы запросов, предоставляемые API Spring Data Solr.

4.1. Генерация запроса Имени метода

Запросы на основе имени метода генерируются путем анализа имени метода для создания ожидаемого запроса для выполнения:

public List findByName(String name);

В нашем интерфейсе репозитория у нас есть findByName метод, который генерирует запрос на основе имени метода:

List retrievedProducts = productRepository.findByName("Phone");

4.2. Запрос С Аннотацией @Query

Поисковые запросы Solr могут быть созданы с помощью запроса в аннотации метода @Query . В нашем примере найти по пользовательскому запросу аннотируется @Query аннотацией:

@Query("id:*?0* OR name:*?0*")
public Page findByCustomQuery(String searchTerm, Pageable pageable);

Давайте использовать этот метод для извлечения документов:

Page result 
  = productRepository.findByCustomQuery("Phone", new PageRequest(0, 10));

Вызывая поиск по пользовательскому запросу(“Телефон”, new PageRequest(0, 10)) мы получаем первую страницу документов продукта, которые содержат слово “Телефон” в любом из его полей id или name .

4.3. Именованный запрос

Именованные запросы аналогичны запросам с аннотацией @Query , за исключением того, что запросы объявлены в отдельном файле свойств:

@Query(name = "Product.findByNamedQuery")
public Page findByNamedQuery(String searchTerm, Pageable pageable);

Обратите внимание, что аннотация @Query не требуется, если ключ ( findByNamedQuery ) запроса в файле свойств совпадает с именем метода.

Давайте извлекем некоторые документы с помощью метода именованных запросов:

Page result 
  = productRepository.findByNamedQuery("one", new PageRequest(0, 10));

5. Заключение

Эта статья представляет собой краткое и практическое введение в Spring Data Solr, охватывающее базовую конфигурацию, определение репозиториев и естественные запросы.

И, как всегда, примеры, используемые здесь, доступны в виде примерного проекта на Github .