Search is the heart of a great user experience.
Users expect results instantly.
Slow queries kill conversion rates and frustrate visitors.
Traditional LIKE %query% SQL statements don't scale well.
They become sluggish as your database grows.
Laravel Scout solves this problem.
It provides a driver-based full-text search for your Eloquent models.
You get the power of dedicated search engines with the simplicity of Laravel.
Scout: The Ecosystem Bridge
Scout acts as a bridge between your database and specialized search engines. It keeps your search indexes in sync with your records automatically. You don't have to manually update your index every time a user changes their profile. Scout handles it. It uses model observers to watch for changes. When a record is saved, Scout pushes the update to your search provider. This is part of the robust Laravel ecosystem designed to prevent reinventing the wheel.

Choosing Your Search Engine: Drivers
Scout supports several drivers out of the box. Each has different strengths. Your choice depends on your project's size and budget.
Algolia: The Managed Gold Standard
Algolia is a hosted service. It offers high reliability and low latency. It includes advanced features like typo tolerance and analytics. It's great for production apps that need the best search experience without managing infrastructure.
Meilisearch: Fast and Open Source
Meilisearch is a powerful, open-source alternative. It's built for speed and has a great developer experience. You can host it yourself or use their managed service. It's a favorite for teams who want control over their stack.
Database: Simple and Integrated
The database driver uses your existing SQL database. It's perfect for small projects or MVPs. You don't need any extra services to get started. It uses the same API as the more powerful drivers. This makes it easy to upgrade to Algolia or Meilisearch later.

Getting Started: Installation
Installation is straightforward. Use Composer to pull in the package.
composer require laravel/scout
After installing, publish the configuration file.
php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
This creates a config/scout.php file.
You can set your default driver here or in your .env file.
Set SCOUT_DRIVER=meilisearch or SCOUT_DRIVER=algolia based on your choice.
Making Models Searchable
To add search to a model, use the Searchable trait.
This trait registers the observers needed for syncing.
namespace App\Models;
use Laravel\Scout\Searchable;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
use Searchable;
}
By default, Scout converts the entire model to an array for the search index.
You usually want to customize this.
Large blobs of text or sensitive data shouldn't be in your search index.
Override the toSearchableArray method to define what gets indexed.
public function toSearchableArray()
{
return [
'id' => (int) $this->id,
'title' => $this->title,
'slug' => $this->slug,
'body' => $this->body,
];
}

Importing Your Existing Data
If you have an existing database, your search engine won't know about those records yet. You need to perform an initial import. Scout provides an Artisan command for this.
php artisan scout:import "App\Models\Post"
This command batches your records and pushes them to the search engine.
If you ever need to clear the index, use the flush command.
php artisan scout:flush "App\Models\Post"
Performing Searches
Once your data is indexed, searching is easy.
Use the search method on your model.
$posts = App\Models\Post::search('Laravel Scout')->get();
The results are returned as a standard Eloquent collection. You can chain additional constraints or paginate the results.
$posts = App\Models\Post::search('Laravel Scout')
->where('category_id', 1)
->paginate(15);
Because it returns Eloquent models, all your relationships and custom methods work exactly as expected.

Performance: Queueing the Indexing
Updating a search index involves making an external HTTP request.
Doing this during a web request can slow down your application.
Users shouldn't wait for Algolia to respond before their post is saved.
Scout supports queueing out of the box.
Enable it in your config/scout.php file or .env.
SCOUT_QUEUE=true
With queueing enabled, Scout will push indexing tasks to your Laravel queue. This keeps your user interface snappy and responsive. It's a must-have for production environments.
External Integrations
Laravel Scout integrates seamlessly with many third-party services. Whether you are handling payments with Stripe or connecting with Discord, search keeps your data accessible. Our framework's commitment to a best-in-class developer experience means you focus on features, not plumbing.

Best Practices for Success
Keep your search indexes lean.
Only index fields that users actually search against.
Use the shouldBeSearchable method to conditionally index records.
For example, you might only want to index "published" posts.
public function shouldBeSearchable()
{
return $this->is_published;
}
This prevents the search index from becoming cluttered with drafts or private data. It also saves on costs if you are using a paid service like Algolia.
Summary: Ship Fast with Scout
Laravel Scout takes the pain out of full-text search. It offers an elegant syntax for a complex problem. By leveraging drivers, you can scale from a simple database search to a massive Algolia index without changing your code. It's part of why Laravel is the preferred choice for modern web development. Start building today. We'd love to see what you create.
Check out the official documentation for more advanced configurations and engine-specific features.