【问题标题】:Php Search engine errorphp搜索引擎错误
【发布时间】:2014-01-16 10:01:06
【问题描述】:

我正在尝试编写一个搜索引擎。
除此之外,如果我输入像西海岸这样的查询,我也会得到东海岸的结果。发生这种情况是因为东部和西部的关键字包含 Coast 作为单个单词。

但是我想使用这行代码将两者分开:

<?php
$k = $_GET['k'];
$terms = explode(" ", $k);
$query = "SELECT * FROM Search WHERE ";
foreach ($terms as $each){
    $i++;

    if($i == 1)
        $query .= "keywords LIKE '%$each%' ";
    else
        $query .= "OR keywords LIKE '%$each%' ";

}

如果我回显出在搜索表单中使用的关键字确实会分开,但它们不会分开
我该如何解决这个问题?

<?php
$k = $_GET['k'];
$terms = explode(" ", $k);
$query = "SELECT * FROM Search WHERE ";
foreach ($terms as $each){
    $i++;

    if($i == 1)
        $query .= "keywords LIKE '%$each%' ";
    else
        $query .= "OR keywords LIKE '%$each%' ";

}
if($k == "" || $k == " ")
{
    echo "<p> Please enter a valid search term."; //If search is empty or contains only a space.
    exit;
}
//connect to database
mysql_connect("LOCALHOST" ,"ROOT" ,"PASSWORD");
mysql_select_db("DATABASE");
$query = mysql_query($query);
$numrows = mysql_num_rows($query);
if($numrows > 0){
    while($row = mysql_fetch_assoc($query))
    {
        $id = $row['id'];
        $title = $row['title'];
        $description = $row['description'];
        $keywords = $row['keywords'];
        $link = $row['link'];
        echo "<h2><a href ='$link' class='searchcolor' color='#a8a8a8'> $title</a></h2>
            $description<br />
            This page contains information about \"<b>$query</b>\"<br /><hr>";
    }

}
else
    echo "No results for \"<b>$k</b>\"";

//disconnect
mysql_close();


?>

【问题讨论】:

  • 使用 MATCH() 而不是像这样 MATCH('East Coast') 它返回加权搜索结果,因此您可以按相关性排序,即:东海岸的相关性高于西海岸,因此您可以确保东海岸出现在顶部,西海岸出现在第 200 页上。请注意,这只适用于全文索引和 myiasm 表。您可以使用 innodb 表执行此操作,但您必须在代码中执行此操作而不是查询。

标签: php search search-engine


【解决方案1】:

您的查询:

SELECT * FROM Search WHERE keywords LIKE '%west%' OR keywords LIKE '%$coast%';

由于OR,将返回与这些关键字中的任一匹配的结果。如果您希望结果匹配所有关键字,请使用AND

即改变

$query .= "OR keywords LIKE '%$each%' ";

 $query .= "AND keywords LIKE '%$each%' ";

【讨论】:

  • @brian 没问题。很高兴为您提供帮助。
猜你喜欢
  • 2013-09-24
  • 2014-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多