PHP MySQL搜索查询 - 如何查找"我的搜索"在搜索" mysearch"?

时间:2014-04-06 18:10:53

标签: php mysql database search

我还没有找到答案,也许我忽略了它,但这是一个非常简单的问题:

我有Joomla / Virtuemart的搜索模块,我对此模块生成的搜索结果有1个问题。

当我输入此搜索字词时," mysearch "我希望它能够使用属于搜索查询的单词查找所有结果,例如标题:"这是我的搜索"或者"多么好的搜索"

如何使用MySQL实现这一目标?

这是我的工作代码:

$ab = explode(' ', $keyword);
  $ccc='';
          $ccc2='';
          foreach ($ab as $k)
          {
            if (!empty($k))
           {

          if($ccc==''){         
          $ccc.= " concat(product_name, customtitle) RLIKE '".$db->getEscaped($k)."' AND";
                }
                else{
           $ccc.= " concat(product_name, customtitle) RLIKE '".$db->getEscaped($k)."' AND";
                }

                    if($ccc2==''){
          $ccc2.= " product_sku RLIKE '".$db->getEscaped($k)."' AND";
                }
                else{
            $ccc2.= " product_sku RLIKE '".$db->getEscaped($k)."' AND";
                }


       }
       else { 
       $ccc2.= " product_sku RLIKE '0' AND";
       $ccc.= " concat(product_name, customtitle) RLIKE '0' AND";
       }
    }

$ccc = rtrim($ccc, "AND");  
$ccc2 = rtrim($ccc2, "AND");    




$q ="(SELECT p.virtuemart_product_id, l.product_name
 from #__virtuemart_products p join
      #__virtuemart_products_".VMLANG." l
      on p.virtuemart_product_id = l.virtuemart_product_id
 WHERE ".$ccc." AND
       p.published = '1'
 LIMIT 0,".$prods."
)
union (select p.virtuemart_product_id, l.product_name
 from #__virtuemart_products p join
      #__virtuemart_products_".VMLANG." l
      on p.virtuemart_product_id = l.virtuemart_product_id
 where ".$ccc2." and
       p.published = '1'
 LIMIT 0,".$prods.")";

2 个答案:

答案 0 :(得分:0)

据我所知......不可能使用MySQL。

如果你想要真正的模糊匹配,你需要一个专为它设计的搜索系统。 Lucene库对此非常有用,可用于一些令人惊叹的OSS项目。

结帐ElasticSearchSolr

这两个我推荐ElasticSearch

答案 1 :(得分:0)

我很好奇如何回答同样的问题,虽然我对levenshtein不熟悉,但我发现这个问题与我的问题非常相似,并以有效的方法回答。

注意:其他状态说明这只适用于小数据搜索。因为它反复复合,你可以想象它可能是多么昂贵(CPU和内存)。

堆栈溢出参考 php (fuzzy) search matching

PHP文档: PHP:net levenshtein