Подходы к созданию пользовательского поиска по сайту
Автор вопроса: Silver LightОтветов: 6
Я делаю социальный сайт с множеством различных разделов, таких как блоги, галереи, мультимедиа и т. д. И теперь пришло время реализовать функцию поиска. Заказчик отказался от использования поиска Google и настоял на создании пользовательского поиска, в котором результаты будут отображаться для каждого раздела отдельно.
Например, если пользователь вводит "искусство", результат должен отображаться следующим образом:
3 found in blogs
1 ...
2 ...
3 ...
2 found in galleries
1 ...
2 ...
None found in multimedia
Я планирую использовать для этого полнотекстовый поиск MySQL. Итак, вопрос: как мне сделать такой поиск, чтобы он не убил сервер, если очень много записей соответствуют запросу? Я действительно не понимаю, как реализовать пейджинг в этом случае.
Я настоятельно рекомендую НЕ использовать MySQL для полнотекстового поиска, он медленный как при создании индекса, так и при выполнении поиска.
Взгляните на Sphinx или Lucene, которые значительно быстрее, чем MySQL, и довольно легко связываются с приложениями PHP.
Ответ 2 · рейтинг 2 · yent
Вы не убьете сервер mysql такой штукой, даже если ваше приложение огромно (здесь мы говорим о тысячах запросов в секунду), вам просто нужно настроить копию вашего сервера mysql, предназначенного для поиска, вы можете захотеть создайте кеш "результатов популярных ключевых слов", чтобы немного ускорить процесс, но такие устройства, как googlemini, по-прежнему лучше всего подходят для этого ...
Ответ 3 · рейтинг 2 · Nick Clark
Если вы можете запустить контейнер сервлетов Java (например, Tomcat или Jetty), я рекомендую Solr (http://lucene.apache.org/solr/). Он расположен поверх Lucene и очень мощный. Solr был запущен в CNET и используется крупными сайтами, такими как Netflix и Zappos. Stack Overflow использует реализацию Lucene для .NET. Я не знаком со Sphinx, поэтому не могу сказать, чем он отличается от Solr.
Если вы используете Solr, обратите внимание на фасетирование. Это позволяет вам выполнить поиск, а затем подсчитать, сколько документов было в "блогах", "галереях", "мультимедиа" и т. д.
Вот клиент PHP для взаимодействия с Solr (http://code.google.com/p/solr-php-client/).
Я делал это раньше на некоторых сайтах, которые я создал. Что я сделал, так это выполнил один запрос к каждому модулю, чтобы найти результаты. То, что вы хотите сделать, это запустить запрос mysql, а затем выбрать строки в цикле while, а не использовать выборку всех. Это гарантирует, что вы не будете чрезмерно потреблять память.