Giao diện
Search (Laravel Scout)
Giới thiệu (Introduction)
Laravel Scout cung cấp giải pháp full-text search đơn giản, driver-based cho Eloquent models. Sử dụng "model observers", Scout tự động đồng bộ search indexes khi Eloquent records thay đổi.
Drivers hỗ trợ
| Driver | Mô tả |
|---|---|
| Algolia | Search-as-a-service |
| Meilisearch | Open-source search engine |
| Typesense | Open-source search engine |
database | Database full-text search |
collection | Collection driver (cho development) |
Cài đặt (Installation)
bash
composer require laravel/scout
php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"Algolia Driver
bash
composer require algolia/algoliasearch-client-phpenv
SCOUT_DRIVER=algolia
ALGOLIA_APP_ID=your-algolia-app-id
ALGOLIA_SECRET=your-algolia-secretMeilisearch Driver
bash
composer require meilisearch/meilisearch-php http-interop/http-factory-guzzleenv
SCOUT_DRIVER=meilisearch
MEILISEARCH_HOST=http://127.0.0.1:7700
MEILISEARCH_KEY=masterKeyCấu hình Model
Thêm trait Searchable vào model:
php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Laravel\Scout\Searchable;
class Post extends Model
{
use Searchable;
/**
* Tên search index.
*/
public function searchableAs(): string
{
return 'posts_index';
}
/**
* Data được đưa vào search index.
*/
public function toSearchableArray(): array
{
return [
'id' => (int) $this->id,
'title' => $this->title,
'content' => $this->content,
];
}
}Indexing
Batch Import
bash
php artisan scout:import "App\Models\Post"Flush (Xóa index)
bash
php artisan scout:flush "App\Models\Post"Record Operations
php
// Thêm/cập nhật
$order = new App\Models\Order;
$order->save(); // Tự động index
// Bulk update
App\Models\Order::where('price', '>', 100)
->searchable();
// Xóa khỏi index
$order->delete(); // Tự động xóa khỏi index
// Hoặc manual
$order->unsearchable();Tạm dừng Indexing
php
use App\Models\Order;
// Không index trong callback
Order::withoutSyncingToSearch(function () {
Order::create([/* ... */]);
});Conditional Searchable
php
public function shouldBeSearchable(): bool
{
return $this->isPublished();
}Tìm kiếm (Searching)
php
use App\Models\Order;
$orders = Order::search('Star Trek')->get();
// Với where clause
$orders = Order::search('Star Trek')
->where('user_id', 1)
->get();
// Paginate
$orders = Order::search('Star Trek')->paginate(15);
// Raw results (từ search engine)
$orders = Order::search('Star Trek')->raw();
// Custom index
$orders = Order::search('Star Trek')
->within('custom_index')
->get();Where Clauses
php
$orders = Order::search('Star Trek')
->where('status', 'paid')
->where('user_id', 1)
->get();
$orders = Order::search('Star Trek')
->whereIn('status', ['paid', 'open'])
->get();Soft Deletes
Khi model dùng soft deletes, Scout có thể cấu hình giữ soft deleted records trong index:
php
// config/scout.php
'soft_delete' => true,Tìm kiếm bao gồm soft deleted:
php
$orders = Order::search('Star Trek')->withTrashed()->get();
$orders = Order::search('Star Trek')->onlyTrashed()->get();Database Engine
Driver database phù hợp cho ứng dụng nhỏ-vừa sử dụng MySQL hoặc PostgreSQL (full-text indexing):
env
SCOUT_DRIVER=databasephp
$orders = Order::search('Star Trek')->get();Collection Engine
Driver collection ideal cho development — dùng where clauses và Collection filtering:
env
SCOUT_DRIVER=collection