PHP搜索使用多个单词

时间:2011-11-04 15:57:21

标签: php mysql search-engine

我正在尝试创建一个搜索功能,用户可以在文本字段中输入两个单词,然后分割单词并构建一个MySQL查询。

这是我到目前为止所做的。

$search     = mysql_real_escape_string( $_POST['text_field']);
$search     = explode(" ", $search);

foreach($search as $word)
{
    $where = "";
    $where      .= "product_code LIKE '%". $word ."%'";
    $where      .= "OR description LIKE '%". $word ."%'";

    $query      = "SELECT * FROM customers WHERE $where";
    $result     = mysql_query($query) or die();

    if(mysql_num_rows($result))
    {
        while($row = mysql_fetch_assoc($result))
        {
            $customer['value']  = $row['id'];
            $customer['label']  = "{$row['id']}, {$row['name']} {$row['age']}";
            $matches[]          = $customer;
        }
    }
    else
    {
        $customer['value']  = "";
        $customer['label']  = "No matches found.";
        $matches[]          = $customer;
    }
}

$matches = array_slice($matches, 0, 5); //return only 5 results

它构造并运行查询,但返回有趣的结果。

任何帮助都将不胜感激。

3 个答案:

答案 0 :(得分:1)

  1. MySQL有一个名为LIMIT的东西,所以你最后一行是不必要的。

  2. 使用全文搜索:http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html - 它更快更优雅

答案 1 :(得分:0)

如果您的数据库采用MyISAM表格式,您可以对您感兴趣的列进行全文搜索,如已提到的Sn0opy

我个人认为,当涉及到mySQL时,如果你真的想创建一个出色的搜索引擎,可以使用Sphinx(http://sphinxsearch.com/)或Solr(http://lucene.apache.org/solr/

两者可能存在学习曲线,但结果是专业的。

答案 2 :(得分:0)

任何比“有趣的结果”更具体的机会?袖口外有几种可能性,但它实际上取决于返回的结果。我的PHP有点生疏,所以如果我的大脑投入一些java规则,我会先前道歉,但乍一看...

将数组命名为$ search之外的其他内容。这可能不是问题,但是由explode()创建的数组带有被爆炸的字符串的名称看起来很奇怪。尝试类似$ searching = explode(“”,$ search);然后在随后的foreach()循环中使用$ searching。

如果用户只放入一个搜索字词怎么办?如果$ text_field中没有空格,那么explode将返回一个空数组,这应该会彻底查询你的查询。在爆炸$ search之前,您至少应该验证$ text_field中是否有空格。同样,如果用户输入两个搜索词,但其中一个词是由空格分隔的两个词,该怎么办?再次,您将获得“有趣的结果”,因为您将获得您不想要的结果以及重复的结果,因为查询将单独扩展到术语中的两个单词。

如果不了解“搞笑结果”的含义,那么拍摄这张照片真的很难。