如何实现支持空格分隔多关键词联合匹配的商品检索功能
多关键词联合检索改造方案
实现思路
你现有代码将整个搜索串作为单一值匹配字段,无法支持多关键词同时命中的需求。可先将搜索字符串按空格拆分为独立关键词,要求每个关键词都命中品牌名或通用名字段,多关键词之间用AND关联,即可实现类似Biogesic Paracetamol的联合检索效果:只要商品同时包含两个关键词,无论关键词分别在品牌名还是通用名字段,都会被检索到。
改造后代码示例
if ($cat_id != 0) { // 拆分搜索串为关键词数组,过滤空值去除无效条件 $keywords = array_filter(explode(' ', trim($searchStr))); $matchConditions = []; foreach ($keywords as $kw) { // 关键词转义避免SQL注入,生产环境建议优先用预处理语句 $safeKw = addslashes($kw); $matchConditions[] = "(PRODUCT_BRANDNAME LIKE '%$safeKw%' OR PRODUCT_GENERIC_NAME LIKE '%$safeKw%')"; } // 拼接SQL条件 $fullCondition = implode(' AND ', $matchConditions); $sqlProducts = "SELECT * FROM product WHERE $fullCondition AND CATEGORY_ID = $cat_id LIMIT $start_from, $num_per_page"; }
优化建议
- 上述转义方案仅做示例,生产环境请使用PDO或mysqli的预处理语句传参,彻底规避SQL注入风险。
- 若商品数据量较大,LIKE模糊查询性能偏低,可给
PRODUCT_BRANDNAME和PRODUCT_GENERIC_NAME字段建立全文索引,改用MATCH AGAINST语法做全文检索,查询效率和匹配精度都会明显提升。
内容的提问来源于stack exchange,提问作者Julius Fernando
相关产品推荐
相关产品推荐

