上一篇
// 模糊搜索标题或内容 Post::where('title', 'LIKE', "%{$query}%") ->orWhere('content', 'LIKE', "%{$query}%") ->get();
💡 提示:搭配fullText
索引提升MySQL性能,迁移文件中添加:
$table->fullText(['title', 'content']);
// 使用Searchable Trait use LaravelScoutSearchable; class Post extends Model { use Searchable; public function toSearchableArray() { return [ 'title' => $this->title, 'content' => $this->content, ]; } } // 控制器调用 Post::search($query)->get();
// 配置.env SCOUT_DRIVER=algolia ALGOLIA_APP_ID=YOUR_APP_ID // 实时搜索示例 $posts = Post::search($query) ->where('status', 'published') ->paginate(10);
✨ 优势:自动索引更新、实时搜索建议、多语言支持。
// 使用ES|QL查询 $response = Elasticsearch::search([ 'index' => 'posts', 'body' => [ 'query' => [ 'match' => ['content' => $query] ], 'sort' => [['created_at' => 'desc']] ] ]);
🔥 2025新特性:
场景 | 解决方案 |
---|---|
多字段组合查询 | 复合索引 fullText(columns) |
高频词权重排序 | MySQL IN BOOLEAN MODE |
实时数据检索 | Elasticsearch索引优先 |
// 热点数据缓存(Redis示例) $posts = Cache::remember('search_'.$query, 3600, function() use ($query) { return Post::search($query)->get(); }); // 碎片化更新 Cache::forget('search_'.$oldQuery);
// 预加载关联模型 User::with(['posts' => function($q) use ($query) { $q->where('title', 'LIKE', "%{$query}%"); }])->get();
// 速率限制 Route::middleware('throttle:60,1')->group(function() { Route::get('/api/search', [SearchController::class, 'index']); }); // JWT认证 Route::middleware('auth:api')->group(function() { Route::get('/advanced-search', [SearchController::class, 'advanced']); });
// 日志记录 Log::channel('search')->info('Search executed', [ 'query' => $query, 'user' => Auth::id(), 'results' => $posts->count() ]); // Sentry集成 if (app()->bound('sentry')) { app('sentry')->configureScope(function ($scope) use ($query) { $scope->setTag('search_query', $query); }); }
💻 实战代码包
GitHub示例库 包含:
通过本文方案,可实现毫秒级响应的智能搜索系统,兼顾开发效率与运行性能! 🚀✨
本文由 业务大全 于2025-08-25发表在【云服务器提供商】,文中图片由(业务大全)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://xdh.7tqx.com/wenda/729324.html
发表评论