当前位置: 首页 > news >正文

tp5 关键词搜索商品时进行关键词拆分

记录:商品查询接口对搜索关键词进行拆分搜索

拆分方式:
1,正则匹配

	// 1. 清理并拆分关键词(支持中文+空格拆分)$keywords = array_filter(preg_split('/[\s]+/u', trim($keyword)),function($item) {return $item !== '';});

2,使用中文分词库Jieba-php拆分

// 安装Jieba分词库:composer require fukuball/jieba-php
use Fukuball\Jieba\Jieba;
use Fukuball\Jieba\Finalseg;// 初始化分词器
// Jieba::init();	//初始化大词典,对内存高消耗,不建议使用
Jieba::init(['mode' => 'default', 'dict' => 'small']);	//初始化小词典,对内存低消耗,推荐使用
Finalseg::init();// 执行分词
$keywords = Jieba::cut($keywords);
$keywords = array_unique(array_filter($keywords));  // 数组去重、过滤数组中的空字符串

最后,使用闭包函数对每个关键词搜索

$keywordsWhere  = '';
if($keywords){// 1.分词操作代码// 2.组合闭包查询$keywordsWhere = function ($query) use ($keywords) {foreach($keywords as $keyword){// // 每个关键词在多个字段中匹配(AND),即商品信息中包含所有的关键词// $query->where(function ($sub) use ($keyword) {//     $sub->where('goods_name', 'like', "%{$keyword}%")//         ->whereOr('content', 'like', "%{$keyword}%");// });// 每个关键词在多个字段中匹配(OR),即商品信息中包含任意一个关键词$query->whereOr(function ($sub) use ($keyword) {$sub->where('m.goods_name', 'like', "%{$keyword}%")->whereOr('m.content', 'like', "%{$keyword}%");});}};
}

相关文章:

  • [Linux]我在Linux世界觉醒了指令系统
  • JavaScript基础-创建对象的三种方式
  • 【C++重载操作符与转换】文本查询示例
  • 数据库故障排查指南:解决常见问题,保障数据安全与稳定
  • 数据分析_Python
  • PyTorch实现三元组损失Triplet Loss
  • 为什么 Docker 建议关闭 Swap
  • 基于多头自注意力机制(MHSA)增强的YOLOv11主干网络—面向高精度目标检测的结构创新与性能优化
  • Elasticsearch Fetch阶段面试题
  • Springboot构建项目时lombok不生效
  • 51单片机仿真突然出问题
  • Almalinux中出现ens33 ethernet 未托管 -- lo loopback 未托管 --如何处理:
  • 提示词定制-AI写方案太泛?用“5W1H”提问法,细节拉满!
  • 售前工作.工作流程和工具
  • 【八股战神篇】Java集合高频面试题
  • nodejs快速入门到精通1
  • C++:C++内存管理
  • 题单:表达式求值1
  • 什么是差分传输?
  • 信任的进阶:LEI与vLEI协同推进跨境支付体系变革
  • 当“诈骗诱饵”盯上短剧
  • 俄乌谈判开始
  • 张汝伦:康德和种族主义
  • 特朗普促卡塔尔说服伊朗放弃核计划,伊朗总统:你来吓唬我们?
  • 经常口干口渴的人,要当心这些病
  • 小耳朵等来了春天:公益义诊筛查专家走进安徽安庆