Как ускорить поиск предложений - PullRequest
1 голос
/ 08 марта 2011

Я хочу быстро выполнить поиск, например, 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.';
}

Ответы [ 3 ]

1 голос
/ 08 марта 2011

Я бы посоветовал вам указать, где вы проводите свое самое большое время.Мне нравится наблюдать, как пакеты отправляются из Wireshark по назначению, хотя это выглядит излишним, когда есть плагины для Firefox, которые будут отслеживать ваши запросы.

Однако, глядя на ваш код, я бы сказал, что, скорее всего,это код на стороне сервера, в частности, предложение WHERE x LIKE% y%.Большинство БД не так хорошо работают с левым символом подстановки, потому что они используют b-дерево для своих индексов, поэтому я бы избавился от этого первого подстановочного знака.Кроме того, предварительно составьте список предложений, основанных на прошлых опечатках и их исправлениях.Если вы сделали это и правильно проиндексировали свою таблицу, ваши запросы могут быть довольно быстрыми.

0 голосов
/ 08 марта 2011

Скорее всего, вы хотите использовать элитную структуру данных, такую ​​как бинарное дерево или дерево, или радикальное дерево, или дерево патриций, или дерево критических битов.Я сделал себе реализацию карт-три.Вы можете взять его на phpclasses.org и найти kart-trie.

0 голосов
/ 08 марта 2011

Есть много причин, по которым результаты поиска Google будут быстрее, чем у вас.

С макушки головы,

  1. Вместо бесплатной версии MySQL у них будет какое-то оптимизированное хранилище данных с индексами и полнотекстовым поиском

  2. У них нет только одного сервера, который обслуживает их запрос, у них будет CDN и кластеры серверов, и вы попадете на ближайший к вам сервер с низкой задержкой

  3. У них будут кешированные текущие запросы, поэтому им не придется искать их каждый раз, когда вы их нажимаете.

  4. Они будут работать на своих собственных выделенных серверах, которые будут делать только ваши результаты поиска каждый день вместо общего сервера с кучей других людей на нем

Забудьте о попытке сопоставить Google. Узнайте, где ваш поиск медленный и исправить это. Установите firebug и посмотрите, сколько времени потребуется вашему серверу, чтобы ответить. Профилируйте свой код, чтобы увидеть, какие части работают медленно. Большую часть времени причиной этого являются плохо спроектированные таблицы и медленные серверы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...