簡體   English   中英

如何加快搜索建議

[英]How to Speed Up Search Suggestions

我想提出像Google這樣的快速搜索建議。 我用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.';
}

我建議您進行配置,以了解您在哪里花費了最多的時間。 我喜歡看從Wireshark到目的地的數據包,盡管當有Firefox插件可以跟蹤您的請求時,這似乎有些過分。

但是,查看您的代碼,我想最有可能的是服務器端代碼,特別是WHERE x LIKE%y%子句。 大多數DB在使用左通配符時效果不佳,因為它們使用b樹作為索引,因此我將擺脫第一個通配符。 除此之外,根據過去的拼寫錯誤和更正內容,預先編譯建議列表。 如果執行此操作並正確索引了表,則您的請求可能會非常快。

谷歌的搜索結果會比您的搜索結果更快的原因很多。

從我頭頂上

  1. 他們將擁有某種具有索引和全文搜索的優化數據倉庫,而不是MySQL的免費版本

  2. 他們沒有一台服務器來滿足他們的請求,它們有一個CDN和服務器集群,而您會碰到離您最近的服務器以降低延遲

  3. 他們會緩存當前的趨勢查詢,因此不必在每次點擊時都進行查詢。

  4. 他們將在自己的專用服務器上運行,這些服務器什么也不做,但每天都會提供搜索結果,而不是上面有很多人的共享服務器

忘記嘗試匹配Google了。 找出搜索緩慢的地方並解決。 安裝firebug,然后查看服務器響應需要多長時間。 分析您的代碼以查看哪些部分運行緩慢。 多數情況下,表設計不良和服務器運行緩慢是造成這種情況的原因

您最有可能想要使用精英數據結構,例如二叉樹或trie,基數樹,patricia樹或crit-bit樹。 我自己做了一個卡丁車嘗試。 您可以在phpclasses.org上獲取它並搜索kart-trie。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM