如何在 Laravel 中实现多个关键词的相关搜索?

Mary-Kate Olsen
发布: 2024-11-08 06:43:01
原创
348 人浏览过

How to Implement a Relevant Search in Laravel with Multiple Keywords?

使用多个关键字和相关性排序的 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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板