Trình điều khiển tìm kiếm thông minh trong Laravel

Tram Ho

Chức năng tìm kiếm là chức năng mà bất kỳ một dự án lớn nhỏ nào cũng cần có. Và không ngoại lệ, trong một dự án laravel mình đang làm có sử dụng elasticsearch nên hôm nay mình xin giới thiệu với các bạn về package scout-elasticsearch-driver.

Để kết hợp ElasticSearch với Laravel có rất nhiều packages hỗ trợ như: Plastic, Elasticsearch Eloquent, elasticsearcher,… Nhưng trong bài viết này mình sẽ giới thiệu package Scout Elasticsearch Driver. Đây là 1 package giúp chúng ta làm việc với ElasticSearch và Eloquent một cách dễ dàng.Trước tiên chúng ta sẽ đi tìm hiểu qua một số khái niệm nhé!

1. Laravel Scout là gì?

Laravel Scout là full-text search dựa trên driver dành cho Eloquent. Ngoài ra, nó còn hỗ trợ Algolia, Elastic Search, và vì nó là full-text search dựa trên driver nên bất cứ ai cũng có thể tạo sự tích hợp của riêng mình với các hệ thông full-text search khác.

Laravel Scout hoạt động dựa trên nó thêm tính chất search vào các Model đã có. Sau đó chỉ việc đồng bộ hóa data với các dịch vụ tìm kiếm.

2. Elasticsearch là gì?

  • Elasticsearch là công cụ tìm kiếm và phân tích phân tán, RESTful mã nguồn mở, được xây dựng trên Apache Lucene. Kể từ khi phát hành đến nay, Elasticsearch đã nhanh chóng trở thành công cụ tìm kiếm thông dụng nhất và được sử dụng rộng rãi.
  • Elasticsearch thực chất hoặt động như 1 web server, có khả năng tìm kiếm nhanh chóng thông qua giao thức RESTful.

3. Cách cài đặt package

  • Để cài đặt chúng ta chỉ cần dùng composer:
  • Nếu bạn sử dụng laravel phiên bản <=5.4 thì sẽ thêm providers vào config/app.php:
  • Sau khi đã cài đặt thành công package thì bạn dùng command line sau để publish config:
  • Lệnh này sẽ tự động tạo cài đặt trong 2 file config/scout.php và config/scout_elastic.php. Và chúng ta có thể thay đổi một số cấu hình ban đầu của nó. Các bạn có thể tham khảo thêm ở đây
    Như vậy là chúng ta đã cài đặt thành công package rồi đó ạ.

4. Cách sử dụng package trong project laravel

1. Tạo IndexConfigurator

  • Mỗi một Model Eloquent sẽ đồng bộ với một chỉ mục tìm kiếm index, chứa tất cả các bản ghi có thể tìm kiếm cho mô hình đó. Nói cách khác , bạn có thể hiểu đơn giản index trogn Elasticsearch như 1 table vậy, tuy nhiên nó không hoàn toàn giống.
  • Một index configurator được sử dụng để setting cho một chỉ mục tìm kiếm index. Để tạo 1 index configurator ta sử dụng command sau:
    Lưu ý rằng tên của từng index configurator sẽ phải khác nhau.
  • Nó sẽ tạo ra một file MyIndexConfigurator.php ở trong thư mục app. Tại đây bạn có thể đặt tên và settings cho index configurator (Các bạn có thể tham khảo thêm các settings khác tại đây)

VD: Mình có 1 VD setting đơn giản sau:

Và để index configurator hoạt động chúng ta cần run command sau:

Tương tự khi bạn sửa settings và bạn muốn update index configurator có thể run command:

Xoá một index configurator:

2. Tạo Searchable Model

Thực ra bước này đa số khi làm vào thực tế thì bản thân chúng ta đã tạo sẵn các Model tương ứng cho từng chỉ mục tìm kiếm rồi. Nhưng mình vẫn giới thiệu cho các bạn cách tạo 1 Searchable Model nhes ?

  • Để tạo 1 Searchable Model chúng ta sử dụng command sau:
  • Nó sẽ tạo ra một file app/Models/MyModel.php có dạng như sau:
  • Trong đó:
  • Mapping là quá trình định nghĩa làm thế nào một document và các fields của nó được lưu trữ và đánh index. Cụ thể sử dụng mapping để định nghĩa: type, format,.. cho từng model fields.
  • function toSearchableArray() dùng để tùy chỉnh data để đồng bộ hóa với từng chỉ mục tìm kiếm. Mình thấy có một bài khá hay về việc customize searchable data các bạn tham khảo thêm ở đây nhes!
  • Còn trong trường hợp chúng ta đã tạo sẵn Model rồi thì chỉ cần use thêm Searchable, khai báo index configurator, $mapping và function toSearchableArray().
  • Và để đồng bộ hóa đc data thì chúng ta cần run command:

3. Sử dụng

  • Vì đây là package kết hợp giữa scout và elasticsearch nên saukhi đã hoàn thành các bước trên chúng ta cần thêm một bước vô cùng quan trọng đó là import data vào từng index thông qua câu lệnh sau:
    php artisan scout:import "AppModelsMyModel"
  • Ngoài ra khi CRUD một record được tự động thêm vào chỉ mục tìm kiếm thì sau khi thực hiện chúng ta thêm:
  • Giờ đây thông qua Model bạn có thể bắt đầu tìm kiếm bằng các sử dụng phương thức search(), các bạn xem thêm ở đây nhé!

4. Search rules

Ở trong model bạn add $searchRules property:

5. Debug

  • Package cũng cấp hai phương thức có thể giúp chúng ta phân tích kết quả truy vấn tìm kieesm:

5. Tài liệu tham khảo

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo