Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Laravel 5
Code

Thiết lập tìm kiếm full-text với Scout trong Laravel

by
Difficulty:IntermediateLength:MediumLanguages:

Vietnamese (Tiếng Việt) translation by Vy Cam Nguyen (you can also view the original English article)

Tìm kiếm full-text (toàn văn) rất quan trọng để cho phép người dùng điều hướng các website giàu nội dung. Trong bài này, tôi sẽ hướng dẫn cho bạn cách triển khai tìm kiếm full-text cho một ứng dụng Laravel. Trong thực tế, chúng ta sẽ dùng thư viện Laravel Scout, điều này làm cho việc khai triển tìm kiếm full-text dễ dàng và thú vị.

Chính xác thì Laravel Scout là gì? Tài liệu chính thức tóm tắt như sau:

Laravel Scout cung cấp giải pháp đơn giản, dựa trên driver để bổ sung tìm kiếm full-text vào các model Eloquent của bạn. Sử dụng model observer, Scout sẽ tự động duy trì các index tìm kiếm của bạn đồng bộ với các bản ghi Eloquent của bạn.

Về cơ bản, Laravel Scout là một thư viện quản lý việc xử lý của index bất cứ khi nào có sự thay đổi trong dữ liệu của model. Nơi dữ liệu sẽ được lập index phụ thuộc vào driver mà bạn đã định cấu hình với thư viện Scout.

Hiện tại, thư viện Scout hỗ trợ Algolia - API công cụ tìm kiếm từ cloud và đó là công cụ chúng tôi sẽ sử dụng trong bài viết này để minh hoạ cho triển khai tìm kiếm full-text.

Chúng ta sẽ bắt đầu bằng cách cài đặt các thư viện máy chủ Scout và Algolia, và sau đó chúng ta sẽ xem qua một ví dụ thực tế để minh họa cách làm sao để lập index và tìm kiếm dữ liệu của mình.

Cấu hình máy chủ

Trong phần này, chúng ta sẽ cài đặt các dependency (thư viện phụ thuộc) cần thiết để Scout hoạt động tốt với Laravel. Sau khi cài đặt, chúng ta sẽ cần phải cấu hình một chút để Laravel có thể nhận biết thư viện Scout.

Hãy tiếp tục cài đặt thư viện Scout bằng Composer.

Cho đến giờ việc cài đặt thư viên Scout là điều cần quan tâm. Bây giờ chúng ta đã cài đặt thư viện Scout, bảo đảm rằng Laravel đã biết đến nó.

Khi làm việc với Laravel, bạn có thể nghe về khái niệm service provider, nó cho phép bạn cấu hình các dịch vụ trong ứng dụng của mình. Vì vậy, bất cứ khi nào bạn muốn kích hoạt một dịch vụ mới trong ứng dụng Laravel của bạn, bạn chỉ cần thêm một service provider trong config/app.php.

Nếu bạn chưa quen với các service provider của Laravel, tôi thực sự khuyên bạn xem qua bài giới thiệu giải thích các khái niệm của Service Provider trong Laravel.

Trong trường hợp của chúng ta, chúng ta chỉ cần bổ sung service provider có tên là ScoutServiceProvider vào danh sách các service provider trong config/app.php, như hiển thị trong đoạn mã sau.

Bây giờ, Laravel đã biết đến ScoutServiceProvider. Thư viện Scout đi kèm với file cấu hình cho phép chúng tôi thiết lập thông tin đăng nhập API.

Hãy tiếp tục và xuất bản các tài sản được cung cấp bởi thư viện Scout bằng lệnh sau đây.

Như bạn có thể thấy, nó đã copy file vendor/laravel/scout/config/scout.php vào config/scout.php.

Tiếp theo, hãy tiếp tục tạo một tài khoản với Algolia vì chúng tôi sẽ cần thông tin đăng nhập API. Khi bạn có thông tin API, tiếp tục định cấu hình các cài đặt cần thiết trong file config/scout.php, như hiển thị trong code sau.

Lưu ý rằng chúng tôi đã đặt giá trị của SCOUT_DRIVER thành trình điều khiển algolia. Vì vậy, nó là cần thiết mà bạn cấu hình các thiết lập cần thiết cho trình điều khiển Algolia ở phần cuối của tập tin. Về cơ bản, bạn chỉ cần xét idsecret mà bạn đã có từ tài khoản Algolia.

Như bạn thấy, chúng tôi đang lấy các giá trị từ các biến môi trường. Vì vậy, hãy bảo đảm rằng chúng tôi đặt các biến sau trong file .env đúng cách.

Cuối cùng, chúng ta cần cài đặt Algolia PHP SDK, sẽ được dùng để tương tác với Algolia bằng cách sử dụng các API. Hãy cài đặt bằng cách sử dụng composer như đoạn mã sau đây:

Chúng ta đã cài đặt tất cả các thư viện phụ thuộc cần thiết để post và lập chỉ mục dữ liệu cho dịch vụ Algolia.

Giúp các model có thể lập chỉ mục và có thể tìm kiếm

Trong phần trước, chúng ta đã hoàn thành các việc khó khăn khi thiết lập thư viện Scout và Algolia để có thể lập chỉ mục và tìm kiếm dữ liệu bằng dịch vụ tìm kiếm Algolia.

Trong phần này, chúng tôi sẽ đi qua một ví dụ minh họa cách bạn có thể lập chỉ mục dữ liệu hiện có và truy xuất kết quả tìm kiếm từ Algolia. Tôi giả định rằng bạn có một model Post mặc định trong ứng dụng của bạn mà chúng ta sẽ sử dụng trong ví dụ của chúng ta.

Điều đầu tiên mà chúng ta cần làm là bổ sung thêm một trait Laravel\Scout\Searchable vào model Post. Điều này giúp model Post có thể tìm kiếm được; Laravel đồng bộ hóa các bản ghi bài đăng với chỉ mục Algolia mỗi khi vào bản ghi bài đăng được tạo mới, cập nhật hoặc xóa.

Với điều đó, model Post dễ dàng tìm kiếm!

Tiếp theo, chúng tôi muốn định cấu hình các field sẽ được lập chỉ mục ngay từ đầu. Tất nhiên, bạn không muốn lập chỉ mục tất cả các field của model ở Algolia duy trì hiệu quả và gọn nhẹ. Trong thực tế, thường thì bạn sẽ không cần nó.

Bạn có thể thêm toSearchableArray trong model để cấu hình các field sẽ được lập chỉ mục.

Bây giờ, chúng tôi đã sẵn sàng import và lập chỉ mục các bản ghi Post hiện có vào Algolia. Trong thực tế, thư viện Scout khiến việc này trở nên dễ dàng bằng cách sử dụng lệnh artisan sau đây.

Nó sẽ nhập tất cả các bản ghi của model Post một lần duy nhất! Chúng được lập chỉ mục ngay khi sau khi nhập, vì vậy chúng tôi đã sẵn sàng để truy vấn các bản ghi sẵn có. Hãy tiếp tục khám phá bảng điều khiển của Algolia để xem các bản ghi đã được nhập cùng với các tiện ích khác.

Nó hoạt động như thế nào

Trong phần này, chúng tôi sẽ tạo ra một ví dụ minh họa cho cách thực hiện các hoạt động tìm kiếm và CRUD được đồng bộ hóa thời gian thực với chỉ mục Algolia.

Tiếp tục tạo file app/Http/Controllers/SearchController.php với nội dung sau.

Tất nhiên, chúng ta cũng cần thêm route tương ứng.

Hãy xem qua phương thức query để xem cách thực hiện tìm kiếm trong Algolia.

Nhớ lại rằng chúng tôi đã giúp model Post có thể tìm kiếm được bằng cách thêm trait Searchable. Do đó, model Post có thể sử dụng phương thức search để lấy các bản ghi từ chỉ mục Algolia. Trong ví dụ trên, chúng tôi đang cố gắng tìm các bản ghi phù hợp với từ khóa title.

Tiếp theo, có phương thức add để mô phỏng quy trình tạo một bản ghi mới.

Không có gì mới trong đoạn code trên; nó chỉ tạo một bản ghi mới bằng cách sử dụng model Post. Nhưng model Post triển khai trait Searchable, do đó Laravel thực hiện thêm một số việc trong lúc này bằng cách lập chỉ mục bản ghi mới được tạo ra ở Algolia. Như bạn có thể thấy, việc lập chỉ mục được thực hiện trong thời gian thực.

Cuối cùng, có phương thức delete. Chúng ta cũng xem qua nó.

Như bạn chờ đợi, bản ghi sẽ bị xóa ngay lập tức khỏi chỉ mục Algolia ngay sau khi bị xóa khỏi cơ sở dữ liệu.

Về cơ bản, bạn không cần làm thêm gì nếu bạn muốn giúp các model hiện tại có thể tìm kiếm được. Mọi thứ được xử lý qua thư viện Scout bằng cái model observers.

Và nó cũng kết thúc bài viết này!

Tổng kết

Hôm nay, chúng ta đã thảo luận làm sao để triển khai tìm kiếm full-text trong Laravel bằng thư viện Laravel Scout. Trong quá trình này, chúng ta đã trải các thiết lập cần thiết và ví dụ thực tế để minh hoạ cho điều đó.

Vui lòng đặt câu hỏi nếu bạn có bất kỳ thắc mắc nào thông qua phần bình luận bên dưới!

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.