1. Giới thiệu về Elasticsearch
ElasticSearch là 1 search engine sử dụng như 1 server và khi ta muốn thêm, sửa, xóa dữ liệu thì ta sẽ dùng curl để connect đến server ElasticSearch thông qua cổng 9200.
Elasticsearch là một document oriented database, nhiệm vụ của nó là lưu trữ và triệu gọi document. Tất cả các documents được hiển thị dưới dụng Json. Elasticsearch cho phép phân tích và tìm kiếm dữ liệu theo thời gian thực, nó có performance rất tốt, dễ dàng áp dụng và triển khai một cách hiệu quả vào các nguồn dữ liệu khác nhau.
2. Cài đặt Elasticsearch
Tham khảo cách cài đặt tại đây.
Với Macos, cách dễ dàng nhất là cài đặt thông qua homebrew.
- Để cài homebrew, chạy command sau:
$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"<br>
- Để cài Elasticsearch:
$ brew tap elastic/tap
$ brew install elastic/tap/elasticsearch-full
- Sau khi cài xong, chạy lệnh sau để start Elasticsearch:
$ elasticsearch<br>
- Elasticsearch sẽ chạy ở cổng 9200, kiểm tra trên browser:
3. Cài đặt Kibana
Kibana là một nền tảng phân tích hiển thị dữ liệu từ Elasticsearch một cách trực quan dễ sử dụng, Kibana cũng là một công cụ mã nguồn mở miễn phí, cho tất cả mọi người sử dụng. Kibana cung cấp các tính năng cho người dùng quản lý như biểu đồ cột, biểu đồ đường, biểu đồ tròn, biểu đồ nhiệt và nhiều loại chart khác nữa.
- Để cài Kibana, tham khảo tại đây.
Mình sẽ minh họa cách cài đặt trên macos, thông qua homebrew:
$ brew tap elastic/tap
$ brew install elastic/tap/kibana-full
- Sau đó, tích hợp Elasticsearch với Kibana bằng cách sửa file cấu hình kibana.yml:
$ cd /usr/local/etc/kibana
$ nano kibana.yml
Ta chỉ việc uncomment dòng sau: elasticsearch.hosts:[“http://localhost:9200“]
- Để start Kibana, ta chỉ việc chạy command sau:
$ kibana
- Kibana sẽ chạy ở cổng 5601, kiểm tra trên trình duyệt:
4. Cài đặt Laravel Scout
Tham khảo Laravel Scout trên docs của Laravel tại đây.
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.
- Cài đặt Laravel Scout package:
composer require laravel/scout<br>
- Sau khi cài thành công Scout, dùng command line để publish config Scout:
php artisan vendor:publish --provider="LaravelScoutScoutServiceProvider"
5. Cài đặt Elasticsearch Driver
Ở đây, mình sẽ sử dụng matchish/laravel-scout-elasticsearch. Tham khảo tại đây.
- Cài đặt:
composer require matchish/laravel-scout-elasticsearch
- Trong file .env:
SCOUT_DRIVER=MatchishScoutElasticSearchEnginesElasticSearchEngine
ELASTICSEARCH_HOST=localhost:9200 - Đăng kí provider trong config/app.php:
'providers' => [
// Other Service Providers
MatchishScoutElasticSearchElasticSearchServiceProvider::class
],
- Publich config sử dụng câu lệnh:
php artisan vendor:publish --tag config
6. Cấu hình Model Indexes
Sau khi tạo model, migration, mỗi model sẽ được đồng bộ với một search index. Mỗi index sẽ chứa tất cả các records có thể được search trong Model đó. Ta có thể hiểu mỗi index giống như 1 SQL table:
<?phpnamespaceAppModels;useIlluminateDatabaseEloquentModel;useLaravelScoutSearchable;classEmployeeProfileextendsModel{useSearchable;}
7. Import index
- Nếu muốn import các records đã có trong models, ta sử dụng câu lệnh sau:
php artisan scout:import "AppModelsEmployeeProfile"
- Mở index management trong Kibana, ta sẽ thấy các index mới được import vào:
- Mỗi record trong SQL sẽ tương ứng với 1 document trong index.
8. Searching
- Sử dụng phương thức search():
$profiles = Employeeprofile::search('fpt')->get();
- Kết hợp sử dụng where:
$orders = Order::search('Starrek')->where('user_id', 1)->get();
- Kết hợp phân trang:
$orders = Order::search('Starrek')->paginate(10);
9. Tài liệu tham khảo
https://viblo.asia/p/su-dung-elasticsearch-trong-laravel-3Q75wDxBKWb
https://www.elastic.co/guide/index.html
https://laravel.com/docs/8.x/scout
Nguồn: viblo.asia