Blog. Just Blog

Быстрый поиск

Введите фрагмент названия статьи для поиска

Релевантный поиск по базе MySQL

04.11.2011 | Категория: Web-мастеру и не только | Автор: ManHunter

Релевантный поиск по базе MySQL

Я уже писал о возможностях поиска с учетом морфологии, а теперь обещанная статья о релевантном поиске по базе MySQL. Как разъясняют словари, релевантность - в поисковых системах - мера соответствия результатов поиска задаче поставленной в запросе. То есть чем ближе найденный результат соответствует искомому, тем выше в результатах поиска он должен находиться. Применительно к выборке из базы, в строках результата релевантность должна быть представлена неким числовым значением, по которому эта выборка должна быть отсортирована.

Начнем с теории. Если мы ищем строку из нескольких слов среди нескольких текстов, то наибольшей релевантностью обладает текст, в котором встречается вся эта строка целиком и точно в том виде, как ее задали к поиску. Затем идут тексты, где есть все слова из искомой фразы, но расположенные не по порядку. После них идут тексты, где встречаются только отдельные слова, и, чем меньше слов из фразы, тем ниже релевантность. К тому же слова из заголовка текста должны иметь поисковый вес больше, чем такие же слова из текста.

Читать статью целиком »
Просмотров: 16542 | Комментариев: 13

Как сделать свой сервис коротких ссылок

02.06.2011 | Категория: Web-мастеру и не только | Автор: ManHunter
С ростом популярности социальных сетей типа Twitter, где длина сообщения ограничена, возникла необходимость в специальных сервисах для сокращения длинных ссылок. В результате появилось много сайтов, где вы можете ввести длинную ссылку и вместо нее получить короткую. При переходе по такой ссылке вы сперва попадаете на сайт-редиректор, а уже с него выполняется автоматический переход на нужную ссылку. Я даже встречал такие сокращенные ссылки в печатных изданиях, а не только в интернете. Ничего сложного в реализации такого сервиса нет, и сейчас мы сделаем что-нибудь подобное.

Начинается все с покупки короткого доменного имени. Все красивые имена уже разобраны или захвачены киберсквоттерами, но кое-что еще можно найти. В конце концов, рядовому пользователю нет особой разницы, по красивой ссылке идти или по некрасивой, главное чтобы она помещалась в его сообщение. Хорошо, домен у нас есть, едем дальше.

А дальше нам надо продумать структуру базы данных, в которой будут храниться короткие ссылки и их соответствия. Поскольку мы делаем сейчас самый простейший сервис, то пусть структура базы будет такой:

CREATE TABLE IF NOT EXISTS `redirector_links` (
`link_id` INT(11) NOT NULL AUTO_INCREMENT COMMENT 'ID ссылки в базе',
`link_hash` VARCHAR(32) COMMENT 'Хэш ссылки',
`link_url` TEXT COMMENT 'Адрес ссылки',
PRIMARY KEY (`link_id`),
KEY `link_hash` (`link_hash`)
) ENGINE=MyISAM

Хэш ссылки нужен для того, чтобы не создавать в базе дубли для повторяющихся ссылок. В принципе, сюда же можно добавить счетчик для сбора статистики переходов, добавить принадлежность к какому-нибудь владельцу и т.п. Все зависит от поставленных задач.

Читать статью целиком »
Просмотров: 20424 | Комментариев: 24

Выбор случайной строки из таблицы MySQL

20.04.2011 | Категория: Web-мастеру и не только | Автор: ManHunter
Одна из часто встречающихся задач при создании сайтов - выборка случайной строки из таблицы MySQL. Это может быть случайный баннер в ротации, какая-нибудь "фраза дня" или афоризм, промо-блок на главной странице и т.п. Применений масса. Я решил на практике протестировать несколько вариантов решения этой задачи. Исходные данные: база MySQL, таблица типа MyISAM проиндексирована по полю id, количество записей около 500000, поле id обозначено как PRIMARY KEY, в нумерации есть "дырки" из-за удаленных строк.

Переходим к тестированию. Традиционное решение сводится к такому запросу:

SELECT * FROM `table` ORDER BY RAND() LIMIT 1

Код на PHP для тестирования:
  1. // Тест №1
  2. $query="SELECT * FROM `table` ORDER BY RAND() LIMIT 1";
  3. $sql_result=mysql_query($query);
  4. $row=mysql_fetch_array($sql_result);
  5. mysql_free_result($sql_result);
Результаты не радуют. Среднее время выполнения одного такого запроса на моем компьютере занимает 2.5 секунды. На реальном проекте, особенно если он работает под нагрузкой, такие затраты времени недопустимы.

Читать статью целиком »
Просмотров: 12393 | Комментариев: 9

Ошибка MySQL "Got error 28 from storage engine"

20.05.2010 | Категория: Web-мастеру и не только | Автор: ManHunter
Прихожу на работу, а у меня уже телефон разрывается от звонков. Рабочий сайт компании лежит с загадочной ошибкой MySQL "Got error 28 from storage engine", причем не весь, а выборочно местами и только на некоторых запросах. В официальной документации по MySQL ничего внятного не нашел, но после небольшого расследования и поиска в разных интернетах выяснилось, что такая ошибка возникает из-за нехватки свободного места на диске. На небольших запросах оставшегося места хватало для работы MySQL и возвращался какой-то результат, а на более ресурсоемких появлялась указанная ошибка. Позвонил админам, добавили места, почистили мусор, проблема сразу же решилась. Вот такая загогулина. Может кому-нибудь пригодится.

Просмотров: 13371 | Комментариев: 11

PCL's Mini-Chat 1.0

27.12.2009 | Категория: Web-мастеру и не только | Автор: ManHunter
По просьбам трудящихся выкладываю облегченную версию своего мини-чата. На этом сайте используется похожий скрипт, но он тесно интегрирован с остальными модулями движка и отделить его с сохранением всего функционала не представляется возможным. Скрипт написан практически заново и содержит минимальный набор функций, но его функционал можно легко расширять. Скрипт легко интегрируется в любые сайты, написанные на PHP, генерируемый HTML-код и стили CSS проходят валидацию. Для работы скрипта на сервере требуется PHP версии 4 и выше, база MySQL версии 4 и выше, клиентской части требуется поддержка в браузере пользователя JavaScript. Перед установкой мини-чата и заливкой его на сервер надо настроить данные подключения MySQL-базы (файл chat_engine/chat_config.php):
  1. // Данные для подключения к базе
  2. $chat_config['mysql_name']="test";
  3. $chat_config['mysql_host']="localhost";
  4. $chat_config['mysql_user']="root";
  5. $chat_config['mysql_password']="";
  6. // Таблица мини-чата в базе
  7. $chat_config['mysql_table']="chat_table";
и данные авторизации администратора чата:
  1. // Логин админа чата
  2. $chat_config['admin_login']="admin";
  3. // Пароль = md5(md5('password'))
  4. // по умолчанию пароль "password"
  5. $chat_config['admin_password']="696d29e0940a4957748fe3fc9efd22a3";
Обязательно смените дефолтный логин и пароль! Пароль, естественно, должен храниться только в виде хэша, который можно вычислить любой программой для расчета MD5. Логин и пароль чувствительны к регистру. Настройки самого чата лучше не изменять:
  1. // Количество сообщений, одновременно отображаемых в чате
  2. $chat_config['message_count']=20;
  3. // Максимальное количество символов в сообщении
  4. $chat_config['message_text']=200;
  5. // Максимальное количество символов в имени
  6. $chat_config['message_name']=20;
Для защиты от спама используется скрытое поле с ключевым словом, его значение меняется в настройках. Лучше использовать только латинские буквы и цифры.
  1. // Кодовое слово для защиты от спама
  2. $chat_config['chat_nospam']="NO-MORE-SPAM";
Настройки внешнего вида и размеры окна чата изменяются стилями в файле chat_styles.css, в соответствующих шаблонах в папке chat_template, а иконки на кнопках в папке chat_images. По умолчанию все пути к компонентам мини-чата относительные, кодировка windows-1251.

Читать статью целиком »
Просмотров: 5790 | Комментариев: 16

Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2021
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.14 сек. / MySQL: 3 (0.054 сек.) / Память: 5 Mb
Наверх