0

我正在尝试为我的网站制作搜索引擎。foo如果我输入一个单词作为搜索查询,例如or ,效果会很好bar。问题是当我输入两个或多个单词(如foo bar.

我该如何处理这样的词?拆分单词(使用explode)然后在表中查找索引单词的每个单词?这听起来不是个好主意

我正在使用GET这个搜索引擎的方法。

<?php
if($_GET['query']){
    $search = $_GET['query'];
    $search = strip_tags($search);
    $search = trim($search);
    $search = addslashes( strtolower($search));

echo $search;
$start = microtime();
$searchquery = mysql_query("SELECT sw_wordid FROM tbl_search_word WHERE sw_word LIKE '%$search%'");
                               //tbl_search_word contains all the indexed words

$searchrow = mysql_fetch_array($searchquery);   
$end = microtime();

echo $searchrow['sw_wordid'].'<br />';
echo $end - $start;
}

?>

4

2 回答 2

1

首先,我同意 Hanky Panky 拆分它本身并不是一个糟糕的选择,您可以尝试这样做,但是由于没有其他人可以帮助您提供其他选择,我再给您一个,在搜索许多关键字时它不是那么有效并且取决于结果是你想要的。

首先,我请求您正确清理您的输入,不要像您发布的代码那样将用户给您的内容放在字符串中,永远不要这样做,您可能会为 sql inyection 打开一个安全漏洞。尝试使用 PDO 或 mysqli 准备语句。

你可以试试这个:

$searchquery = mysql_query("
SELECT sw_wordid FROM tbl_search_word WHERE INSTR(sw_word,'$search')>0
");

您可以分享您的基准以帮助您改进它,但不知道您想要什么结果,您选择的替代方案可能取决于它。

请分享你的结果。希望这对您有所帮助。

于 2013-06-11T18:40:07.360 回答
-1

我猜您输入的空间被视为 %20 所以出现错误为什么不使用 str_replace("%20", " ",$query);

希望能帮助到你

于 2013-06-11T19:24:27.127 回答