如何加快搜索建议

时间:2011-03-08 04:49:00

标签: php search

我想像谷歌一样快速提出搜索建议。我尝试使用AJAX / jQuery,但速度非常慢。我也尝试使用XML而不是MySQL,但它也很慢。我怎样才能加快速度? 我的jquery代码是:

function lookup(inputString,fname,sbox,asbox) {
    if(inputString.length == 0) {
        // Hide the suggestion box.
        $('#'+sbox).hide();
    } else {
        // post data to our php processing page and if there is a return greater than zero
        // show the suggestions box
        $.post(fname, {mysearchString: ""+inputString+""}, function(data){
            if(data.length >0) {
                $('#'+sbox).show();
                $('#'+asbox).html(data);
            }
        });
    }
}

和php代码是

查询:SELECT maincatid,category FROM maincategory WHERE category LIKE '%$mysearchString%' LIMIT 10"

        if($rs) {
            while ($result = @mysql_fetch_object($rs)) 
            {
                echo '<li onClick="fill(\''.$result->maincatid.'\',\''.$result->category.'\');">'.str_ireplace($mysearchString,'<span style="background-color:#C1E0FF;">'.$mysearchString.'</span>',$result->category).'</li>';
                $c++;
            }
        } 
        else {
            echo 'ERROR: There was a problem with the query.';
        }
    }
    } else {
    } 
} else {
    echo 'Access denied.';
}

3 个答案:

答案 0 :(得分:1)

我建议您查看您的最佳时间花在哪里。我喜欢观看从Wireshark到目的地的数据包,尽管当有适用于Firefox的插件可以追踪您的请求时,这似乎有些过分。

但是,看看你的代码,我会说很可能是服务器端代码,特别是WHERE x LIKE%y%子句。大多数数据库使用左通配符的效果不佳,因为它们使用b树作为索引,因此我将摆脱第一个通配符。除此之外,根据过去的拼写错误及其更正预编译一系列建议。如果您这样做并正确编制了表格索引,那么您的请求可能非常活泼。

答案 1 :(得分:0)

google的搜索结果有很多原因比你的更快。

脱离我的头顶,

  1. 他们会有一些带索引和全文搜索的优化数据仓库,而不是免费版的MySQL

  2. 他们没有一台服务器可以满足他们的请求,他们有一个CDN和服务器集群,你可以点击距离你最近的服务器以获得低延迟

  3. 他们已经缓存了当前的趋势查询,因此每次点击它们都不需要查找它。

  4. 他们将在他们自己的专用服务器上运行,这些服务器每天只为您的搜索结果提供服务,而不是与其他人群共享的共享服务器

  5. 忘记尝试匹配谷歌。找出你的搜索速度慢的地方并解决它。安装firebug并查看服务器响应的时间。分析您的代码以查看哪些部分很慢。大多数情况下,它是设计糟糕的表和速度慢的服务器

答案 2 :(得分:0)

您最有可能想要使用精英数据结构,如二叉树或特里,或基数树,或帕特里夏树或暴击树。我做了一个kart-trie的实现。你可以在phpclasses.org抓住它并搜索kart-trie。