Giới thiệu về Spring Data Solr

1. Khái quát chung

Trong bài viết này, chúng ta sẽ khám phá những kiến ​​thức cơ bản về Spring Data Solr theo cách thực tế.

Apache Solr là một mã nguồn mở sẵn sàng triển khai công cụ tìm kiếm toàn văn cho doanh nghiệp. Bạn có thể tìm thêm về các tính năng của Solr trên trang web chính thức.

Chúng tôi sẽ hướng dẫn cách thực hiện cấu hình Solr đơn giản và tất nhiên là cách tương tác với máy chủ.

Đầu tiên, chúng ta cần khởi động một máy chủ Solr và tạo một lõi để lưu trữ dữ liệu (theo mặc định, Solr sẽ tạo ở chế độ không phân lớp).

2. Dữ liệu mùa xuân

Cũng giống như bất kỳ dự án Spring Data nào khác, Spring Data Solr có mục tiêu rõ ràng là loại bỏ các mã soạn sẵn, mà chúng tôi chắc chắn sẽ tận dụng.

2.1. Maven phụ thuộc

Hãy bắt đầu bằng cách thêm phụ thuộc Spring Data Solr vào pom.xml của chúng tôi :

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

Bạn có thể tìm thấy các phụ thuộc mới nhất tại đây.

2.2. Xác định tài liệu

Hãy xác định một tài liệu có tên là Sản phẩm :

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

Chú thích @SolrDocument cho biết rằng lớp Sản phẩm là tài liệu Solr và được lập chỉ mục cho sản phẩm có tên lõi . Các trường được chú thích bằng @Indexed được lập chỉ mục trong Solr và sẽ có thể tìm kiếm được.

2.3. Xác định giao diện kho lưu trữ

Tiếp theo, chúng ta cần tạo giao diện kho lưu trữ bằng cách mở rộng kho lưu trữ được cung cấp bởi Spring Data Solr. Chúng tôi sẽ tham số tự nhiên điều này với Sản phẩmChuỗi làm id thực thể của chúng tôi:

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); }

Lưu ý cách chúng tôi xác định ba phương thức ở đây, trên đầu trang API được cung cấp bởi SolrCrudRepository . Chúng ta sẽ nói về những điều này trong một vài phần tiếp theo.

Cũng lưu ý rằng thuộc tính Product.findByNamedQuery được xác định trong tệp truy vấn có tên Solr solr-name-queries.properties trong thư mục classpath:

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

2.4. Cấu hình Java

Bây giờ chúng ta sẽ khám phá cấu hình Spring của lớp bền vững 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("//localhost:8983/solr"); } @Bean public SolrTemplate solrTemplate(SolrClient client) throws Exception { return new SolrTemplate(client); } }

Chúng tôi đang sử dụng @EnableSolrRepositories để quét các gói để tìm kho lưu trữ. Lưu ý rằng chúng tôi đã chỉ định vị trí của tệp thuộc tính truy vấn được đặt tên và bật hỗ trợ đa lõi.

Nếu đa lõi không được bật, thì theo mặc định Spring Data sẽ cho rằng cấu hình Solr dành cho một lõi. Chúng tôi đang bật đa lõi ở đây, chỉ để tham khảo.

3. Lập chỉ mục, Cập nhật và Xóa

Để tìm kiếm tài liệu trong Solr, tài liệu nên được lập chỉ mục vào kho lưu trữ Solr.

Ví dụ sau lập chỉ mục một tài liệu sản phẩm trong kho lưu trữ Solr chỉ bằng cách sử dụng phương thức lưu của SolrCrudRepository :

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

Bây giờ chúng ta hãy truy xuất và cập nhật một tài liệu:

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

Có thể xóa tài liệu bằng cách gọi phương thức xóa:

productRepository.delete(retrievedProduct);

4. Truy vấn

Bây giờ chúng ta hãy khám phá các kỹ thuật truy vấn khác nhau do Spring Data Solr API cung cấp.

4.1. Tạo truy vấn tên phương thức

Các truy vấn dựa trên tên phương thức được tạo bằng cách phân tích cú pháp tên phương thức để tạo ra truy vấn dự kiến ​​sẽ thực thi:

public List findByName(String name);

Trong giao diện kho lưu trữ của chúng tôi, chúng tôi có phương thức findByName tạo truy vấn dựa trên tên phương thức:

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

4.2. Truy vấn với @Query Annotation

Truy vấn tìm kiếm Solr có thể được tạo bằng cách đặt truy vấn trong chú thích @Query của một phương thức. Trong ví dụ của chúng tôi, findByCustomQuery được chú thích bằng chú thích @Query :

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

Hãy sử dụng phương pháp này để truy xuất tài liệu:

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

Bằng cách gọi findByCustomQuery (“Điện thoại”, PageRequest mới (0, 10)), chúng tôi nhận được trang đầu tiên của tài liệu sản phẩm có chứa từ “Điện thoại” trong bất kỳ id hoặc tên trường nào của nó .

4.3. Truy vấn được đặt tên

Các truy vấn được đặt tên tương tự như các truy vấn có chú thích @Query ngoại trừ các truy vấn được khai báo trong một tệp thuộc tính riêng biệt:

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

Lưu ý rằng chú thích @Query là không bắt buộc nếu khóa ( findByNamedQuery ) của truy vấn trong tệp thuộc tính khớp với tên phương thức.

Hãy truy xuất một số tài liệu bằng phương pháp truy vấn được đặt tên:

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

5. Kết luận

Bài viết này giới thiệu nhanh và thực tế về Spring Data Solr, bao gồm cấu hình cơ bản, xác định kho lưu trữ và tự nhiên - truy vấn.

Và như mọi khi, các ví dụ được sử dụng ở đây có sẵn dưới dạng dự án mẫu trên Github.