Implementing Full-Text Search with Laravel (mention Scout).
Jul 19, 2025 am 02:48 AMLaravel Scout 是 Laravel 內置的工具,用于為 Eloquent 模型添加搜索功能。1. 安裝 Scout 并發(fā)布配置文件;2. 在模型中使用 Searchable trait 以使其可搜索;3. 使用 Artisan 命令導入現(xiàn)有數(shù)據(jù)到索引;4. 使用 search 方法執(zhí)行搜索并支持分頁和條件過濾;5. Scout 自動監(jiān)聽 Eloquent 事件保持索引同步,也可通過 withoutSyncingToSearch 暫停同步;6. 支持軟刪除模型,并可通過切換驅動擴展至 Algolia 或 Meilisearch 實現(xiàn)更強大的搜索功能。
When you're building a Laravel app and need to add full-text search functionality, Laravel Scout is the built-in tool that makes this easier. It provides a simple, driver-based solution for adding searching to your Eloquent models using services like Algolia or Meilisearch. Here's how to get it working effectively.

Setting Up Laravel Scout
Before diving into implementation, make sure Scout is installed. If you're using Laravel 8 or later, it might already be included. If not, install it via Composer:
composer require laravel/scout
Then publish the configuration file:

php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
In the .env
file, set the SCOUT_DRIVER
you want to use—common options are algolia
, meilisearch
, or database
. For local development, the database
driver can work fine.
Also, don't forget to import the Searchable
trait in any model you want to index.

Making Models Searchable
To enable search on a model (like a Post
model), use the Searchable
trait:
use Laravel\Scout\Searchable; class Post extends Model { use Searchable; }
Now, when you save or update a Post instance, Scout will automatically keep the search index in sync.
If you already have existing records in the database, you'll need to import them into the index:
php artisan scout:import "App\Models\Post"
This command will batch-import all posts into the search engine. You can also run scout:flush
if you ever need to clear the index.
Performing Searches
Once everything’s indexed, performing searches is straightforward. Use the search
method on your model:
$posts = Post::search('Laravel')->get();
You can also paginate results:
$posts = Post::search('framework')->paginate(15);
If you're using Algolia or Meilisearch, you can pass additional conditions or filters. For example:
Post::search('Laravel') ->where('published', true) ->orderBy('created_at', 'desc') ->get();
These vary slightly depending on the driver, so check the documentation for specific syntax support.
Keeping Indexes Updated
Scout listens to Eloquent events like saved
, deleted
, and updated
to keep your search index fresh. However, there are cases where you may want to temporarily disable syncing—like during bulk imports or testing.
To pause indexing:
Post::withoutSyncingToSearch(function () { // Perform actions without updating the search index });
Also, if you’re running tests, consider setting SCOUT_QUEUEING=false
in your .env.testing
file to avoid queued updates interfering with test assertions.
Another thing to note: if you're using soft deletes, make sure to implement the SoftDeletes
trait in your model. Scout respects soft-deleted models by default and won’t include them in search results unless you explicitly ask for them.
Depending on your needs, Scout can scale from basic full-text search with the database driver to powerful, real-time search engines like Meilisearch or Algolia. With just a few steps, you can have fast, reliable search functionality integrated into your Laravel app.
That’s basically it — nothing too complex, but easy to miss small config steps or sync behaviors if you're not paying attention.
The above is the detailed content of Implementing Full-Text Search with Laravel (mention Scout).. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undress AI Tool
Undress images for free

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

There are three ways to add custom validation rules in Laravel: using closures, Rule classes, and form requests. 1. Use closures to be suitable for lightweight verification, such as preventing the user name "admin"; 2. Create Rule classes (such as ValidUsernameRule) to make complex logic clearer and maintainable; 3. Integrate multiple rules in form requests and centrally manage verification logic. At the same time, you can set prompts through custom messages methods or incoming error message arrays to improve flexibility and maintainability.

The core methods for Laravel applications to implement multilingual support include: setting language files, dynamic language switching, translation URL routing, and managing translation keys in Blade templates. First, organize the strings of each language in the corresponding folders (such as en, es, fr) in the /resources/lang directory, and define the translation content by returning the associative array; 2. Translate the key value through the \_\_() helper function call, and use App::setLocale() to combine session or routing parameters to realize language switching; 3. For translation URLs, paths can be defined for different languages ??through prefixed routing groups, or route alias in language files dynamically mapped; 4. Keep the translation keys concise and

ToworkeffectivelywithpivottablesinLaravel,firstaccesspivotdatausingwithPivot()orwithTimestamps(),thenupdateentrieswithupdateExistingPivot(),managerelationshipsviadetach()andsync(),andusecustompivotmodelswhenneeded.1.UsewithPivot()toincludespecificcol

Laravelprovidesacleanandflexiblewaytosendnotificationsviamultiplechannelslikeemail,SMS,in-appalerts,andpushnotifications.Youdefinenotificationchannelsinthevia()methodofanotificationclass,andimplementspecificmethodsliketoMail(),toDatabase(),ortoVonage

ServiceProvider is the core mechanism used in the Laravel framework for registering services and initializing logic. You can create a custom ServiceProvider through the Artisan command; 1. The register method is used to bind services, register singletons, set aliases, etc., and other services that have not yet been loaded cannot be called; 2. The boot method runs after all services are registered and is used to register event listeners, view synthesizers, middleware and other logic that depends on other services; common uses include binding interfaces and implementations, registering Facades, loading configurations, registering command-line instructions and view components; it is recommended to centralize relevant bindings to a ServiceProvider to manage, and pay attention to registration

The core methods for handling exceptions and recording errors in Laravel applications include: 1. Use the App\Exceptions\Handler class to centrally manage unhandled exceptions, and record or notify exception information through the report() method, such as sending Slack notifications; 2. Use Monolog to configure the log system, set the log level and output method in config/logging.php, and enable error and above level logs in production environment. At the same time, detailed exception information can be manually recorded in report() in combination with the context; 3. Customize the render() method to return a unified JSON format error response, improving the collaboration efficiency of the front and back end of the API. These steps are

Laravel performance optimization can improve application efficiency through four core directions. 1. Use the cache mechanism to reduce duplicate queries, store infrequently changing data through Cache::remember() and other methods to reduce database access frequency; 2. Optimize database from the model to query statements, avoid N 1 queries, specifying field queries, adding indexes, paging processing and reading and writing separation, and reduce bottlenecks; 3. Use time-consuming operations such as email sending and file exporting to queue asynchronous processing, use Supervisor to manage workers and set up retry mechanisms; 4. Use middleware and service providers reasonably to avoid complex logic and unnecessary initialization code, and delay loading of services to improve startup efficiency.

Dependency injection automatically handles class dependencies through service containers in Laravel without manual new objects. Its core is constructor injection and method injection, such as automatically passing in the Request instance in the controller. Laravel parses dependencies through type prompts and recursively creates the required objects. The binding interface and implementation can be used by the service provider to use the bind method, or singleton to bind a singleton. When using it, you need to ensure type prompts, avoid constructor complications, use context bindings with caution, and understand automatic parsing rules. Mastering these can improve code flexibility and maintenance.
