php - 如何优化 laravel 中的搜索功能?
问题描述
我在使用搜索功能时遇到了我的 laravel 应用程序的问题。这是我的搜索功能代码
use DB;
public function search(Request $request){
$query = $request->input('query');
$products = DB::table('products')
->where('product_title','like','%'.$query.'%')
->get();
让我们想象一下我的应用程序中的产品标题为“演示产品”。如果我打算使用 de/d/mo/pro 等关键字搜索产品,则没有问题。这些关键字显示了一些结果。但是,如果我用“deemoo”/“prooductt”等关键字搜索[打算显示“演示产品”],我怎样才能得到搜索查询结果。如果可以的话,请给我一些建议。提前谢谢:)
解决方案
您需要在您选择的数据库中使用全文搜索索引。您可以在此处阅读有关 MySQL 全文索引的更多信息。
要在 Laravel Eloquent 中实际使用索引,您需要使用原始查询。
User::whereRaw("MATCH(product_name)AGAINST('soccer' IN BOOLEAN MODE)")
->limit(10)
->get();
为了使语法更好一点,您可以为您的 Product 模型添加一个范围。
public function scopeNameMatches($query, $searchTerm)
{
return $query-> whereRaw("MATCH(product_name)AGAINST(? IN BOOLEAN MODE)", $searchTerm);
}
您可以通过以下方式调用范围来使用它。
Product::nameMatches("soccer")->get();
推荐阅读
- javascript - 一个 javascript 会话可以容纳多少个字符?
- python - 如何创建两个值的序列?
- javascript - 如何用moment js做一个格式
- node.js - 如何在我的情况下使用 node.js 打开二进制文件 .nii 文件
- c# - WPF/c#:如何在使用 SplashScreen / Loading Screen 时解决线程问题
- android - 如果 Google Play 游戏服务提供实时多人游戏,那么使用 gamesparks.com 有什么优势?这两者有什么区别?
- python - 如何使用 pymodbus 为将读取它们的外部 Modbus 客户端写入输入寄存器
- c - 编译器优化会影响动态内存分配吗?
- ios - 手动关闭并重新打开后无法访问 Xcode 环境变量
- java - 有时无法拖放