所以我目前正忙着创建一个兴趣爱好的搜索引擎,并且好奇我能不仅仅查询mysql数据库中的关键字列。目前我能够搜索某些内容并根据我的“关键字”列获得结果。但是,如果我搜索的单词或短语不在关键字列中,但在标题栏或说明栏中找到它是否可能会显示,因为它在那些列中找到了它?
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>Search Engine - Search</title>
</head>
<body>
<h2>Search Engine</h2>
<form action='./search.php' method='get'>
<input type='text' name='k' size='50' value='<?php echo $_GET['k']; ?>' />
<input type='submit' value='Search'>
</form>
<hr />
<?php
$k = $_GET['k'];
$terms = explode(" ", $k);
$query = "SELECT * FROM databeast WHERE ";
foreach ($terms as $each){
$i++;
if ($i == 1)
$query .= "keywords LIKE '%$each%' ";
else
$query .= "OR keywords LIKE '%$each%' ";
}
//connect
mysql_connect("localhost", "username", "password");
mysql_select_db("fapster") or die(mysql_error());
$query = mysql_query($query);
$numrows = mysql_num_rows($query);
if ($numrows > 0) {
while ($row = mysql_fetch_assoc($query)){
$url = $row['url'];
$title = $row['title'];
$keywords = $row['keywords'];
echo "<h1><a href='$url'>$title</a></h1>
$keywords<br /><br />";
}
}
?>
</body>
</html>
提前致谢
答案 0 :(得分:0)
我建议您查看MySQL全文搜索。 http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html。
这允许您在查询中搜索多个关键字。此外,全文为您提供了将单词理解为“自然语言”的好处(因此它处理“停用词”,“复数”和“词干”)。见http://dev.mysql.com/doc/refman/5.0/en/fulltext-query-expansion.html
不要抛弃“赞”逻辑。 MySQL全文搜索有一些烦人的事情 - 所以你可能仍然想要使用那个逻辑。他们在这里:
通常我会将全文搜索与“或”或“或”搜索相结合,然后按全文排名组合。
P.S。你的脚本易受SQL注入攻击。在审核之前不要发布到Internet上。