确切的关键字搜索词组

问题描述

| 我正在使用的搜索引擎是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\'
查询。