为什么智能搜索在facebook中如此之快

时间:2011-02-17 10:49:56

标签: mysql facebook full-text-search

我想知道facebook如何在主页上实现搜索功能。只要我输入“a”,下拉列表就会显示朋友列表并且非常快......

我在firebug中看到它向其中一个文件发送了一个ajax请求。

我想在我的一个webapp中实现相同的功能,但即使我的表只有4个记录,也需要一点时间来加载下拉列表。 我所做的是

  1. 使用我的搜索参数发送ajax req
  2. 执行sql查询
  3. 制作了html
  4. 然后将它归还 替换div

2 个答案:

答案 0 :(得分:3)

Facebook使用非常昂贵的CDN(Akamai)使用非常昂贵的服务器,并使用像memcached这样的服务器端缓存。

如果您能够以合理的准确度预测用户可能搜索的内容(例如,已知的朋友和朋友的朋友列表)并在服务器上预先缓存它们,则可以快速执行此操作。如果您首先使用网页提供该列表并将其缓存在客户端上,那么它将是闪电般快速的(一旦页面加载完毕)。

答案 1 :(得分:2)

尝试以下PHP代码,它将爬进Fast Facebook Search网站并回显结果。我希望它会有所帮助,随意调整它:)

<?php
function facebook_search_api($args, $referer = 'YOUR SITE ADDRESS', $endpoint = 'web')
{
$url = "http://www.FastFacebookSearch.com".$endpoint;

if ( !array_key_exists('v', $args) )
$args['v'] = '1.0';
//$args['key']="ABQIAAAArMTuM-CBxyWL0PYBLc7SuhT2yXp_ZAY8_ufC3CFXhHIE1NvwkxT-uD75NXlWUsDRBw-8aVAlQ29oCg";
//$args['userip']=$_SERVER['REMOTE_ADDR'];
$args['rsz']='8';
$url .= '?'.http_build_query($args, '', '&');
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_REFERER, $referer);
$body = curl_exec($ch);
curl_close($ch);
//decode and return the response
return json_decode($body,true);
}
$query_temp=urldecode(isset($_GET['q'])?$_GET['q']:"none");
$search_type=urldecode(isset($_GET['search_engine'])?$_GET['search_engine']:"");


echo "$search_type Search Results for: $query_temp<br />-----<br />";

$query=$search_type.$query_temp;


$res = google_search_api(array('q' => $query));
$pages=$res['responseData']['cursor']['pages'];
$nres=0;
for($i=0;$i<count($pages);$i++)
{
$res = google_search_api(array('q' => $query,'start'=>$rez['responseData']['cursor']['pages'][$i]['start']));
for($j=0;$j<count($res['responseData']['results']); $j++)
{
$nres++;

echo urldecode("<a href=".$res['responseData']['results'][$j]['url'])."><big>";
echo urldecode($res['responseData']['results'][$j]['title'])."</a></big><br />";

echo urldecode("<font color=green><small>".$res['responseData']['results'][$j]['url'])."</small></font><br>";
echo urldecode("<iiisearch>".$res['responseData']['results'][$j]['content'])."<br><br>";



}
}
echo "<br />---<br />Total number of reuslts: $nres";
?>