使用多个关键字和相关性排序的 Laravel 搜索
简介
本文讨论了一个常见问题Laravel 开发中的挑战:实现针对多个数据库列合并多个关键字的搜索功能。搜索结果必须根据相关性排序,并考虑指定关键字的存在和顺序。
问题陈述
用户正在尝试在以下位置实现搜索引擎Laravel 在搜索栏中输入多个关键字,结果按相关性顺序显示。要查询两个特定列:meta_name 和meta_description。搜索条件如下:
解决方案
为了实现此排序,构建了三个单独的数据库查询:
$all = DB::table('posts') ->where('meta_name', 'like', ... /* %word1% %word2% %word3% */) ->orWhere('meta_description', 'like', ... /* %word1% %word2% %word3% */); $twoWords = DB::table('posts') ->where('meta_name', 'like', ... /* %word1% %word2% */) ->orWhere('meta_description', 'like', ... /* %word1% %word2% */) ->whereNotIn('id', $all->pluck('id')); $oneWord = DB::table('posts') ->where('meta_name', 'like', ... /* %word1% */) ->orWhere('meta_description', 'like', ... /* %word1% */) ->whereNotIn('id', $all->pluck('id')) ->whereNotIn('id', $twoWords->pluck('id'));
联合和排序
最后,使用联合组合三个结果集:
$posts = $all->union($twoWords)->union($oneWord)->skip($start)->take($this->rowperpage)->get();
此过程确保符合指定条件的行按所需的相关顺序检索。
分页和异步加载
要实现滚动加载分页,可以使用skip和take方法当用户滚动时附加新结果。当没有更多数据可显示时,可以返回一条消息。
结论
使用提供的解决方案,搜索功能将根据多个关键字检索相关结果以及它们在指定列中的出现顺序。结果将以滚动加载的方式显示,提供无缝的用户体验。
以上是如何在 Laravel 中实现多个关键词的相关搜索?的详细内容。更多信息请关注PHP中文网其他相关文章!