Tối ưu hóa tìm kiếm thương mại điện tử: Cấu hình và sử dụng Solr trong hệ thống xbin-store-cloud

Tối ưu hóa tìm kiếm thương mại điện tử: Cấu hình và sử dụng Solr trong hệ thống xbin-store-cloud

xbin-store-cloud là một hệ thống thương mại điện tử B2C phân tán dựa trên Spring Cloud, tích hợp công cụ tìm kiếm Solr để cung cấp trải nghiệm tìm kiếm sản phẩm hiệu quả. Bài viết này sẽ hướng dẫn chi tiết cách cấu hình và sử dụng Solr trong dự án xbin-store-cloud, giúp các nhà phát triển triển khai nhanh chóng chức năng tìm kiếm cho nền tảng thương mại điện tử.

Kiến trúc ứng dụng Solr trong xbin-store-cloud

Trong dự án xbin-store-cloud, công cụ tìm kiếm Solr chủ yếu thực hiện chức năng tìm kiếm sản phẩm thông qua các thành phần sau:

  • Tầng dịch vụ tìm kiếm: xbin-store-cloud-service-search/src/main/java/cn/binux/search/service/impl/SearchServiceImpl.java
  • Tầng điều khiển tìm kiếm: xbin-store-cloud-web-search/src/main/java/cn/binux/search/controller/SearchController.java
  • Mô hình dữ liệu: xbin-store-cloud-common-pojo/src/main/java/cn/binux/pojo/SolrItem.java

Các bước cấu hình và tích hợp cốt lõi của Solr

1. Thiết kế mô hình dữ liệu

Lớp SolrItem định nghĩa các trường sản phẩm cần thiết cho tìm kiếm, bao gồm id, tiêu đề, giá, tên danh mục và các thông tin quan trọng khác:

@Data
public class SolrItem implements Serializable {
    private String id;
    private String image;
    private Long price;
    private String sell_point;
    private String title;
    private String category_name;
    private String item_desc;
    // Định dạng hiển thị giá
    public String getPriceView() {
        DecimalFormat df1 = new DecimalFormat("#.00");
        return df1.format(price / 100);
    }
}

2. Triển khai dịch vụ tìm kiếm

Lớp SearchServiceImpl thực hiện các thao tác cốt lõi của Solr, bao gồm nhập dữ liệu và truy vấn tìm kiếm:

Chức năng nhập dữ liệu
@Override
public XbinResult importAllItems() {
    List<SolrItem> productList = searchMapper.getProductList();
    try {
        for (SolrItem product : productList) {
            SolrInputDocument document = new SolrInputDocument();
            document.addField("id", product.getId());
            document.addField("item_category_name", product.getCategory_name());
            document.addField("item_title", product.getTitle());
            document.addField("item_image", product.getImage().split(",")[0]);
            document.addField("item_price", product.getPrice());
            document.addField("item_sell_point", product.getSell_point());
            document.addField("item_desc", product.getItem_desc());
            solrClient.add(document);
        }
        solrClient.commit();
    } catch (Exception e) {
        logger.error("Lỗi nhập dữ liệu", e);
    }
    return XbinResult.ok();
}
Chức năng truy vấn tìm kiếm
@Override
public SearchResult search(String keyword, Integer page, Integer rows) {
    SolrQuery query = new SolrQuery();
    // Thiết lập điều kiện tìm kiếm
    query.setQuery(keyword);
    // Thiết lập phân trang
    query.setStart((page - 1) * rows);
    query.setRows(rows);
    // Thiết lập lĩnh vực tìm kiếm mặc định
    query.set("df", "item_keywords");
    // Bật tính năng làm nổi bật
    query.setHighlight(true);
    query.addHighlightField("item_title");
    query.setHighlightSimplePre("<em style=\"color:red\">");
    query.setHighlightSimplePost("</em>");
    
    // Thực thi truy vấn và xử lý kết quả...
    return searchResult;
}

3. Triển khai tầng điều khiển

SearchController xử lý các yêu cầu tìm kiếm từ giao diện người dùng, gọi dịch vụ tìm kiếm và trả về kết quả:

@RequestMapping(value = "/search", method = RequestMethod.GET)
public String search(
        @RequestParam("q") String keyword,
        @RequestParam(defaultValue = "1") Integer page,
        @RequestParam(defaultValue = "0") Integer rows,
        Model model) {
    // Xử lý vấn đề mã hóa
    String decodedKeyword = new String(keyword.getBytes("iso8859-1"), "utf-8");
    // Gọi dịch vụ tìm kiếm
    SearchResult search = searchService.search(decodedKeyword, page, rows);
    // Truyền dữ liệu đến view
    model.addAttribute("query", decodedKeyword);
    model.addAttribute("totalPages", search.getPageCount());
    model.addAttribute("itemList", search.getItemList());
    model.addAttribute("page", search.getCurPage());
    
    return "search";
}

Kỹ thuật tối ưu hóa tìm kiếm Solr

1. Thực hiện làm nổi kết quả

Làm nổi bật các từ khóa phù hợp trong kết quả tìm kiếm để nâng cao trải nghiệm người dùng:

query.setHighlight(true);
query.addHighlightField("item_title");
query.setHighlightSimplePre("<em style=\"color:red\">");
query.setHighlightSimplePost("</em>");

2. Xử lý phân trang

Thiết lập hợp lý các tham số phân trang để tăng hiệu suất tìm kiếm:

// Thiết lập phân trang
query.setStart((page - 1) * rows);
query.setRows(rows);

3. Cấu hình lĩnh vực tìm kiếm

Bằng cách cấu hình trường item_keywords làm lĩnh vực tìm kiếm mặc định, thực hiện tìm kiếm đa trường:

// Thiết lập lĩnh vực tìm kiếm mặc định
query.set("df", "item_keywords");

Tổng kết và thực hành tốt nhất

Dự án xbin-store-cloud đã thực hiện chức năng tìm kiếm sản phẩm hiệu quả thông qua Solr, với các ưu điểm chính bao gồm:

  1. Kiến trúc phân tán: Dựa trên kiến trúc microservice Spring Cloud, dịch vụ tìm kiếm có thể mở rộng độc lập
  2. Hiệu suất cao: Khả năng tìm kiếm toàn văn của Solr hỗ trợ truy vấn nhanh chóng trên lượng lớn dữ liệu sản phẩm
  3. Khả năng mở rộng: Thông qua cấu hình các lĩnh vực tìm kiếm và trọng số khác nhau, hỗ trợ các yêu cầu tìm kiếm kinh doanh phức tạp

Đề xuất với các nhà phát triển trong ứng dụng thực tế:

  • Duy trì định kỳ chỉ mục Solr để đảm bảo tính chính xác của dữ liệu
  • Điều chỉnh trọng số và quy tắc sắp xếp tìm kiếm theo nhu cầu kinh doanh
  • Giám sát hiệu suất tìm kiếm, tối ưu hóa câu truy vấn và cấu trúc chỉ mục

Thông qua các phương pháp được giới thiệu trong bài viết, các nhà phát triển có thể nhanh chóng nắm bắt kỹ năng cấu hình và sử dụng công cụ tìm kiếm Solr trong dự án xbin-store-cloud, mang lại trải nghiệm tìm kiếm sản phẩm hiệu quả và chính xác cho nền tảng thương mại điện tử.

Thẻ: Spring Cloud Solr Thương mại điện tử Tối ưu hóa tìm kiếm xbin-store-cloud

Đăng vào ngày 12 tháng 6 lúc 23:32