如何解决确切的关键字搜索词组
| 我正在使用的搜索引擎是MySQL / PHP搜索引擎。 我已经在论坛上搜索了一段时间,以尝试找到此问题的解决方案。 如果我有3个单独的图片的关键字标记为: #1纯黑色 #2纯白色 #3纯绿色 如果我在搜索框中输入\“ pure white \”,则会出现所有3张图片,因为它们都共享单词“ pure \”。 使用多个搜索关键字时,是否可以添加一种解决方法或代码以仅与完全匹配的搜索短语匹配? 这是代码:<?php
//get data
$button = $_GET[\'submit\'];
$search = $_GET[\'search\'];
$s = $_GET[\'s\'];
if (!$s)
$s = 0;
$e = 10;
$next = $s + $e;
$prev = $s - $e;
if (strlen($search) <= 2)
echo \"Must be greater then 3 chars\";
else {
echo \"<br /><table><tr><td><img src=\'juzzy.jpg\' /></td><td><form action=\'search.php\' method=\'GET\'><input type=\'text\' onclick=value=\'\' size=\'50\' name=\'search\' value=\'$search\'> <input type=\'submit\' name=\'submit\' value=\'Search\'></form></td></tr></table>\";
//connect to database
mysql_connect(\"\",\"\",\"\");
mysql_select_db(\"\");
//explode out search term
$search_exploded = explode(\" \",$search);
foreach($search_exploded as $search_each) {
//construct query
$x++;
if ($x == 1)
$construct .= \"keywords LIKE \'%$search_each%\'\";
else
$construct .= \" OR keywords LIKE \'%$search_each%\'\";
}
//echo outconstruct
$constructx = \"SELECT * FROM searchengine WHERE $construct\";
$construct = \"SELECT * FROM searchengine WHERE $construct ORDER BY keywords LIMIT $s,$e \";
$run = mysql_query($constructx);
$foundnum = mysql_num_rows($run);
$run_two = mysql_query(\"$construct\");
if ($foundnum == 0)
echo \"No results found for <b>$search</b>\";
else {
echo \"<table bgcolor=\'#0000FF\' width=\'100%\' height=\'1px\'><br /></table><table bgcolor=\'#f0f7f9\' width=\'100%\' height=\'10px\'><tr><td><div align=\'right\'>Showing 1-10 of <b>$foundnum</b> results found for <b>$search.</b></div></td></tr></table><p>\";
while ($runrows = mysql_fetch_assoc($run_two)) {
//get data
$title = $runrows[\'title\'];
$desc = $runrows[\'description\'];
$url = $runrows[\'url\'];
echo \"<table width=\'300px\'>
<h4><a href=\'http://$url\'><b>$title</b></a><br />
$desc<br>
<font color=\'00CC00\'>$url</font></table></h4>\";
}
?>
<table width=\'100%\'>
<tr>
<td>
<div align=\"center\">
<?php
if (!$s<=0)
echo \"<a href=\'search.php?search=$search&s=$prev\'>Prev</a>\";
$i =1;
for ($x=0;$x<$foundnum;$x=$x+$e) {
echo \" <a href=\'search.php?search=$search&s=$x\'>$i</a> \";
$i++;
}
if ($s<$foundnum-$e)
echo \"<a href=\'search.php?search=$search&s=$next\'>Next</a>\";
}
}
?>
</div>
</td>
</tr>
</table>
解决方法
不要爆炸您的搜索字符串。这将迫使它使用完整的搜索字符串作为搜索对象,而不是其中的任何一个。
或者,您可以将构造中的运算符OR更改为AND,这样,无论顺序如何,都需要所有单词出现。
, 不要使用模糊
LIKE %%
查询,而是按keywords = \'$search\'
查询。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。