我正在使用的搜索引擎是MySQL / PHP搜索引擎。
我一直在搜索论坛一段时间,试图找到解决这个问题的方法。
如果我有3个单独图像的关键字标记为:
如果我在搜索框中输入“纯白色”,则所有3张图片都会出现,因为它们都共享“纯白”这个词。
在使用多个搜索关键字时,是否有可以添加的解决方法或代码仅匹配完全匹配的搜索词组?
这是代码:
<?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>
答案 0 :(得分:0)
不要爆炸搜索字符串。这将迫使它使用完整的搜索字符串作为搜索,而不是任何一个部分。
或者,您可以将构造中的运算符OR更改为AND,这样就可以显示所有单词,无论顺序如何。
答案 1 :(得分:0)
不要使用模糊LIKE %%
查询,按keywords = '$search'
查询。